MCP tool
classify_postcodes
Return CACI postcode-level categories, groups and types, or explicitly modeled sandbox samples. Live lookups transfer postcodes and consume licensed supplier records, so approve the governed data.postcodes.classify action with these exact requests and connection preconditions first. Read expectedExecutionMode and expectedConfigurationRevision from list_connections; use null revision only when configured is false. Supply an opaque uid per row and a fresh UUID per batch. On an uncertain response retain the exact UUID, records and preconditions: repeating a recorded live attempt returns its metadata without submitting it again. Never automatically create a new UUID to bypass that result. Postcodes and classifications are not persisted by the API; keep raw records out of approval notes and durable agent evidence. Area classifications are not individual attributes or persona-affinity scores.
Input
Pass fields from this schema as the tool arguments. Runtime ownership, product scope and readiness checks still apply.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"requests": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"uid": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"postcode": {
"type": "string",
"maxLength": 12
}
},
"required": [
"uid",
"postcode"
],
"additionalProperties": false
}
},
"expectedExecutionMode": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"expectedConfigurationRevision": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"idempotencyKey": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"agentStepId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "pending execute-step id that consumed the exact approved action"
},
"expectedActionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "SHA-256 digest returned for the exact approved action"
}
},
"required": [
"requests",
"expectedExecutionMode",
"expectedConfigurationRevision",
"idempotencyKey",
"agentStepId",
"expectedActionDigest"
],
"additionalProperties": false
}REST mapping and authority
The tool wraps this REST endpoint. The mapping identifies path/query/body transformations and approval or idempotency headers.
{
"method": "POST",
"path": "/api/v1/data/caci-acorn/classify",
"pathFields": [],
"pathSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"pathEncoding": "encodeURIComponent for each path field",
"governedAction": "data.postcodes.classify",
"headers": {
"x-chorus-agent-step-id": "agentStepId",
"x-chorus-agent-action-digest": "expectedActionDigest",
"idempotency-key": "idempotencyKey"
},
"bodySchema": {
"type": "object",
"properties": {
"requests": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"uid": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"postcode": {
"type": "string",
"maxLength": 12
}
},
"required": [
"uid",
"postcode"
],
"additionalProperties": false
}
},
"expectedExecutionMode": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"expectedConfigurationRevision": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false,
"required": [
"requests",
"expectedExecutionMode",
"expectedConfigurationRevision"
]
},
"responseMapping": "REST JSON is returned as MCP structuredContent and a compatibility text block; privacy-sensitive tools validate their output schema."
}Output
This is the registered MCP output envelope. Nested fields are only modeled where the schema explicitly defines them.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": {}
}Safety annotations
{
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": true
}Annotations help a client present the tool. The API independently enforces authorization and exact action approvals. Error and retry guidance →