Skip to content

Tools overview

The MCP surface is organized by the job a caller is trying to do. Tool registration follows the active runtime: core vocabulary and graph tools require the CDM runtime, while embedding, chat, knowledge-pack, and semantic-projection tools appear only when their prerequisites are available.

Choose a workflow

Need Start with What it gives you
Inspect a known concept or relationship Concept tools Deterministic concept records, hierarchy, paths, edges, and standard mappings
Search with a specific retrieval signal Search tools or embedding tools Candidate records plus the signal used to retrieve them
Resolve free text with a ranked policy concept_ground First successful resolver tier, ranked results, and grounding explanation
Preserve evidence for mapping review Mapping tools A candidate union, standard targets, hierarchy, relationships, and evaluation helpers
Prepare noisy clinical text Text tools Normalized, decomposed, cleaned, or disambiguated search phrases
Classify structured fields domain_classify Best-effort OMOP domain hints for later retrieval
Analyze a source artifact before ingest Source planning tools Neutral tables, column roles, route decisions, warnings, and provenance
Find reusable operational guidance Knowledge tools Applicable knowledge-pack manifests and pack content
Turn a grounded concept into CDM rows semantic_project Deterministic output rows, links, unresolved fields, or suppression reasons
Check what this deployment can do System tools and --describe Backend availability, vocabulary catalogue, and registered MCP surfaces

Tool groups

Group Tools Availability
Concept concept_get, concept_by_code, concept_ancestors, concept_descendants, concept_relationships, concept_equivalency_path, concept_path, concept_neighbors, concept_associations, concept_extended_inheritance, concept_map_to_standard CDM and graph runtime
Resolver concept_ground Graph runtime
Search concept_search_exact, concept_search_fulltext, concept_navigate_to_standard CDM vocabulary runtime
Mapping concept_search_normalized, concept_candidate_bundle, concept_nearest_standard_ancestor, concept_mapping_context, concept_map_to_value, concept_resolve_mapping_expression, mapping_evaluate_candidates CDM runtime; some operations also require graph or embeddings
Embedding embedding_index_status, embedding_neighbours, embedding_search, embedding_search_batch, embedding_encode omop_emb configured
Text text_normalize, text_mapping_cleanup, text_decompose, text_disambiguate Chat model configured
Domain domain_classify Chat model configured
Source planning source_plan, source_plan_assisted Source-planning service; assisted path also needs chat
Knowledge knowledge_catalogue, knowledge_pack Bundled or configured packs available
System system_status, system_vocabulary_catalogue Always registered
Semantic projection semantic_project semantic_projection_enabled = true

The source-planning resources source-planning://canonical-headers, source-planning://column-roles, and source-planning://ingestion-strategies are also registered independently of the tool table. Text preprocessing prompts are available through MCP prompt discovery when the server starts.

MCP, REST, and Python

MCP is the broad, discovery-oriented surface. REST intentionally exposes only curated workflow operations: candidate bundles and assisted source planning, plus /healthz. Direct Python callers should use app.services.* for domain workflows and should not import MCP tool modules to avoid a transport-shaped API.

The one service that is not attached to app.services is SemanticProjectionService: it has no adapter dependency and is constructed directly when the feature is enabled. The integration guide shows the three entry points; the concepts guide explains when each one is appropriate.

Availability and errors

system_status and system_vocabulary_catalogue are always registered so a client can inspect the deployment before assuming optional capabilities exist. Other tool groups are omitted when their backing runtime is not configured. Use groundworkers --describe to inspect the exact active surface.

MCP tools return a JSON-safe error object rather than raising across the transport boundary:

{"error": true, "code": "ERROR_CODE", "message": "Human-readable description"}

Common codes are NOT_FOUND, INVALID_INPUT, BACKEND_UNAVAIL, QUERY_ERROR, and INTERNAL_ERROR. Direct Python services raise GroundworkersError or ValueError instead; REST maps the same categories to HTTP responses.