Skip to content

Define an application MCP tool catalog

Create an ordinary application model named mcp_tool. This is a descriptive catalog: each record tells MCP clients what a tool is and how to validate its arguments. Tool execution belongs to the application’s rule pipeline, so the catalog does not contain implementation pointers such as backing_kind, saved_query_id, function_id, or rule_id.

Define these fields on the model:

Field Type Required Purpose
name varchar, unique yes Case-sensitive tool name exposed by tools/list.
description text yes Guidance shown to the client model.
input_schema json yes JSON Schema used to validate the tools/call arguments object.
output_schema json no Optional JSON Schema for structured tool output.
streaming boolean yes Whether the tool’s call uses the application’s streaming flow.
enabled boolean yes Only records with this value set to true are served.

Add one record per tool. Keep the model in the same tenant, workspace, and application as the MCP endpoint. In input_schema, use an object schema and declare required properties explicitly. For example:

{
"type": "object",
"properties": {
"query": {"type": "string"},
"limit": {"type": "integer", "minimum": 1}
},
"required": ["query"],
"additionalProperties": false
}

Bind the catalog through the application’s mcpSettings value. Each entry in tool_field_mappings is the UUID of the corresponding schema field, not the field name:

{
"mcpSettings": {
"endpoint_service_id": "<inbound-service-uuid>",
"tool_model_id": "<mcp-tool-model-uuid>",
"tool_field_mappings": {
"name": "<name-field-uuid>",
"description": "<description-field-uuid>",
"input_schema": "<input-schema-field-uuid>",
"output_schema": "<output-schema-field-uuid>",
"streaming": "<streaming-field-uuid>",
"enabled": "<enabled-field-uuid>"
}
}
}

The binding may also include resource_model_id with resource_field_mappings, and prompt_model_id with prompt_field_mappings. Those keys are reserved for later catalog surfaces: v1 reads and serves only the tool catalog.