This file defines the public contract for eMCP domain tools.
Contract id:
platform:eMCPtoolsetVersion:1.0
Normative relation:
SPEC.mddefines platform/runtime rules.TOOLSET.mddefines public tool names, params, outputs, and error cases.
evo.content.*andevo.model.*are stable public namespaces.- Rename/removal is allowed only in
MAJORrelease. - New optional params/tools may be added in
MINOR. - Existing optional params cannot become required in
MINOR. - Breaking schema/error changes require
MAJORafter deprecation notice.
initialize response MUST include:
serverInfo.platform = "eMCP"serverInfo.platformVersion = "<package-version>"capabilities.evo.toolsetVersion = "1.0"
This platform metadata is part of the public v1 contract.
Absence or incompatible change of this metadata is a breaking change (MAJOR).
evo.content.searchevo.content.getevo.content.root_treeevo.content.descendantsevo.content.ancestorsevo.content.childrenevo.content.siblings
Post-MVP optional:
evo.content.neighborsevo.content.prev_siblingsevo.content.next_siblingsevo.content.children_rangeevo.content.siblings_range
evo.model.listevo.model.get
MCP tools/call payload:
{
"name": "evo.content.search",
"arguments": {
"limit": 20,
"offset": 0
}
}Arguments:
parentint optionalpublishedbool optionaldeletedbool optionaltemplateint optionalhidemenubool optionaldepthint optionalwith_tvsstring[] optional (nameorname:d)tv_filtersobject[] optional:{ "tv": "price", "op": ">", "value": "100", "cast": "UNSIGNED", "use_default": false }tv_orderobject[] optional:{ "tv": "price", "dir": "asc", "cast": "UNSIGNED", "use_default": false }tags_dataobject optional:{ "tv_id": 17, "tags": ["a", "b"] }order_bystring optional (id|pagetitle|menuindex|createdon|pub_date)order_dirstring optional (asc|desc)order_by_datestring optional (asc|desc)limitint requiredoffsetint optional
Constraints:
- operators:
=,!=,>,>=,<,<=,in,not_in,like,like-l,like-r,null,!null - casts:
UNSIGNED,SIGNED,DECIMAL(p,s) - raw TV DSL is forbidden
- pagination is required
Arguments:
idint requiredwith_tvsstring[] optional
Arguments:
depthint optionalwith_tvsstring[] optionallimitint requiredoffsetint optional
Arguments:
idint requireddepthint optional (where relevant)with_tvsstring[] optionallimitint requiredoffsetint optional
Arguments:
modelstring required (must be in allowlist)filtersobject optional (structured only):{ "where": [ { "field": "name", "op": "like", "value": "foo" } ] }order_bystring optionalorder_dirstring optional (asc|desc)limitint requiredoffsetint optional
Constraints:
filters.where[].fieldMUST be allowlisted for selected model- allowed operators:
=,!=,>,>=,<,<=,in,not_in,like,like-l,like-r,null,!null - raw SQL fragments or raw query DSL are forbidden
Arguments:
modelstring required (must be in allowlist)idint required
Tool responses SHOULD return:
itemsarray for list-like toolsitemobject for get-like toolsmetaobject with pagination and limits
Example:
{
"items": [],
"meta": {
"limit": 20,
"offset": 0,
"count": 0,
"toolsetVersion": "1.0"
}
}Sensitive fields MUST never be returned:
passwordcachepwdverified_keyrefresh_tokenaccess_tokensessionid
Transport/auth/middleware errors use HTTP and non-JSON-RPC error body. JSON-RPC dispatch errors use JSON-RPC error codes.
Canonical mapping:
- invalid params -> JSON-RPC
-32602 - tool/model/server not found -> JSON-RPC
-32601 - forbidden -> HTTP
403 - unauthenticated -> HTTP
401 - idempotency conflict (same key, different payload) -> HTTP
409 - payload/response over configured limits -> HTTP
413
- large responses MUST be paginated
limitcannot exceed configuredmax_result_items- serialized result cannot exceed configured
max_result_bytes