MCP Tools
Overview#
In the AI Service, there are two kinds of MCP Tools
This page describes the main features of both tools and how to set them up.
System MCP Tools#
System MCP Tools are generated from the Platform API package (@dtplatform/platformapi).
They are identified by the _type property being set to system_mcp_tool.
All READ operations in the package are eligible to be exposed as MCP Tools.
Examples of system MCP Tools include:
getFileVersionCount_IafUsageMetrics- Gets file version count for a particular name spacegetGraphicsPermissions_IafPermission- Retrieves permissions for graphics resources.getGroup_IafNotication- Gets a notification group
Custom MCP Tools#
Custom MCP Tools are tools which are created by application developers using the REST API:
POST /aisvc/api/v1/mcp-tools.
This references a script in the Item Service.
They are identified by the _type property being set to user_mcp_tool.
When invoked through MCP, the AI Service executes the referenced Item Service script via the ScriptWorker.
How to create a custom MCP tool#
To create a custom MCP tool using the REST API, do the following:
- Decide your script target
- Create the user MCP Tool
- Verify that the new MCP Tool exists
- Use the MCP Tool
Step 1: Decide your script target#
A user MCP Tool wraps an Item Service script as follows:
_script._userType- the Item Service script namespace/userType_script._scriptName- the script name to execute
To create the script in the Item Service, refer to the format below.
async function findfileNameByID(input, libraries, ctx, callback) { const id = input.id; const { PlatformApi } = libraries; let res = await PlatformApi.IafFileSvc.getFile(id, ctx); return { sucess: true, file_name: res._name }}Step 2: Create the user MCP Tool#
To create the user MCP Tool, use the endpoint below:
POST /aisvc/api/v1/mcp-tools?nsfilter=<YOUR_NS>
Use the body below, which must be an array.
[ { "_name": "GetFileNameById", "_description": "Tool to get file name with id.", "_namespaces": ["<YOUR_NS>"], "_schema": { "type": "object", "properties": { "id": { "type": "string", "description": "pass the id for file" }, "limit": { "type": "integer", "description": "Max results", "default": 25 } }, "required": ["id"], "additionalProperties": false }, "_script": { "_userType": "file_scripts", "_scriptName": "findfileNameByID" } }]MCPTool fields#
| Field | Description |
|---|---|
_schema | Defines arguments for the MCP Tool (JSON schema format). |
_script | Points to Item Service script (_userType) and function name (_scriptName). |
To run the user MCP Tool, use a prompt such as the one listed below.
get the file name for id 753acd4a-3123-48c6-b441-6437e6996d82
Note the following validation rules:
- The tool name must match
^[a-zA-Z0-9_-]{1,64}$(no spaces). - The schema must be a JSON schema object with type:
object.
Step 3: Verify that the new MCP Tool exists#
Verify that the new tool exists by using the REST API call below.
GET /aisvc/api/v1/mcp-tools?nsfilter=<YOUR_NS>&_type=user_mcp_tool
Alternatively, you could search for the tool by name, using a search phrase such as the one listed below.
...&_name=GetAssetsByTag
Step 4. Use the MCP Tool#
Finally, connect your MCP client using the prompt similar to the one below.
nsfilter=<YOUR_NS>
Then call the tool by name.
How to create a MCP Tool Filter resource#
A MCP Tool filter is a saved, reusable tool-selection rule-set and can be referred to while configuring the MCP server in the MCP client.
To create a MCP Tool filter, use the endpoint below.
POST /aisvc/api/v1/mcptoolfilters?nsfilter=<YOUR_NS>
Use a body such as the sample one listed below. It must be an array.
[ { "_name": "File + Item system tools only", "_description": "Demo filter that limits tool visibility to specific services.", "_userType": "demo_file_item_system_tools", "_namespaces": ["<YOUR_NS>"], "_criteria": { "_serviceName": { "$in": ["IafFileSvc", "IafItemSvc"] }, "_type": "system_mcp_tool" } }]Supported values for _criteria property#
Allowed fields#
_name_serviceName(fromtool_config._serviceName) -_type(system_mcp_tooloruser_mcp_tool)
Operators#
Exact match:
"_type": "system_mcp_tool"
In-list:
"_serviceName": { "$in": ["IafFileSvc", "IafItemSvc"] }
Regex:
"_name": { "$regex": "^get.*_IafFileSvc$" }
How to use the MCP Tool filter in the MCP Server#
You can use the MCP Tool filter by passing the filter=... parameter.
Refer to 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.
Only tools from one service#
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_serviceName=IafAISvc
Allow multiple services#
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_serviceName=IafFileSvc&_serviceName=IafItemSvc
Allow only specific tool names#
.../stateless/mcp/tools?nsfilter=<YOUR_NS>&_name=getFiles_IafFileSvc&_name=getNamedUserItems_IafItemSvc
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).