MCP Tool Filter
Overview
MCP clients can struggle when a large number of tools are available. To address this issue, you can apply filters so that only the necessary tools are exposed.
A MCP Tool filter is a saved, reusable, rule set for selecting tools. The filter can be referred to while configuring the MCP server in the MCP client.
Ways to apply MCP Tool filter
You can apply a MCP Tool filter in two ways:
-
Create an MCP Tool filter and reference it in the MCP Server URL (see How to create a MCP Tool filter)
-
Apply the MCP Tool filter directly in the MCP Server URL (see Apply MCP Tool filter in the MCP Server URL)
How to create a MCP Tool filter
To create a MCP Tool filter, refer to the sample code below.
const filters = [
{
_namespaces: ['building_1234'],
_name: 'search-by-name',
_description: 'Filters tools that support name based lookup',
_userType: 'search_tool_filter',
_criteria: {
_name: { $regex: '.*search.*' }
}
}
];
await IafAISvc.createMcpToolFilters(filters, ctx);
Refer to the sections below for notes on this code sample.
_criteria property
The supported values for the _criteria property are:
_name_serviceName(fromtool_config._serviceName)_type(system_mcp_tooloruser_mcp_tool)
Operators
You can also use the following operators with _criteria:
- For exact match:
_type: system_mcp_tool - For checking in-list:
"_serviceName:" { "$in": ["IafFileSvc", "IafItemSvc"] } - For Regex:
"_name": { "$regex": "^get.*_IafFileSvc$" }
Apply MCP Tool filter in the MCP Server URL
You can use the MCP Tool filter by passing the filter parameter in the MCP Server URL
Refer to the sample API call below.
https://dev1-api.in.invicara.com/aisvc/api/v1/stateless/mcp/tools?nsfilter=<YOUR_NS>&filter=demo_file_item_system_tools
The filter parameter can have the following values:
filter=<filter UUID>filter=<filter _userType>
How to apply inline query parameters
If you do not want to create a saved filter resource, you can filter directly in the MCP URL.
Note the supported query parameters:
_serviceName(repeatable) →{ "_serviceName": { "$in": [...] } }_name(repeatable) →{ "_name": { "$in": [...] } }_type(repeatable) →{ "_type": { "$in": [...] } }
Examples
Refer to the examples below for a range of different scenarios.
Example 1: Only tools from one service
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_serviceName=IafAISvc
Example 2: Allow multiple services
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_serviceName=IafFileSvc&_serviceName=IafItemSvc
Example 3: Allow only specific tool names
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_name=getFiles_IafFileSvc&_name=getNamedUserItems_IafItemSvc
Example 4: Combined
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_type=system_mcp_tool&_serviceName=IafFileSvc&_serviceName=IafItemSvc
Notes on using inline parameters
When using inline parameters, note the following behavior:
- If
filter=...is present then the inline query parameters are ignored (filter takes precedence). - Inline criteria supports only strings and
{ "$in": [...] }notation. No$regexis allowed via query parameters).