Skip to content
QUORVE LABS

PII · generation

Synthetic data platform

A production pipeline that scans documents and schemas once, writes a masking blueprint, then fans out synthetic copies with human review, vaultless tokenization, and an agent tool bus.

REGISTRY, PERSONAS, GATEWAY, ERRORS

01Vocabulary

The server owns a single tool registry. Every client — the product chatbot and external MCP clients — dispatches by exact name.

TermMeaningAvoid calling it
ToolA named, callable operationendpoint, skill
PersonaClaim on a minted token: which tool groups the caller may invokerole, permission
GuidanceUnsolicited fragments attached to responses, matched by embedding similarityprompt, instruction
SkillA named playbook the caller pulls. Inert. The server never executes itagent, plugin

Guidance is not access control. Personas are.

02Shape of the service

Python 3.12 MCP server, SSE as the native transport. An HTTP gateway sits beside it for portal integration and for clients that speak OpenAI or Gemini function-calling, not MCP.

TOOL BUS

Rendering diagram…

03Package layout

AreaResponsibility
registry@tool decorator, request_id, timing wrapper
routingWire registry → FastMCP
clientSession, retries, timeout, parsed responses
workflowMulti-step calls: FromInput, FromStep
llm_gatewaySchema export, validation, clarification
errorsStable codes for the model

Adding a tool: write a module, decorate, import. No edits to the server entrypoint.

04Invocation contract

{ "tool": "list_environments", "arguments": { "project_id": 1180 } }

If the tool is unknown or required args are missing, the gateway returns HTTP 200 with:

{
  "needs_clarification": true,
  "message": "project_id is required",
  "missing_parameters": ["project_id"],
  "suggested_questions": ["Which project should I use?"]
}

Guessing is forbidden. The model asks the user.

05Error envelope

Failures become one object the LLM can branch on:

FieldExample
codeUNAUTHORIZED, NOT_FOUND, VALIDATION_ERROR, TIMEOUT
status_codeHTTP-style or 0 for transport
messageHuman/LLM readable
retryabletrue for 5xx and timeouts
sourceplatform / workflow / gateway

HTTP 401 → UNAUTHORIZED. 422 → VALIDATION_ERROR. Workflow step failures → STEP_FAILED with the step name in details.

06Workflows

Named sequences pass outputs forward:

  • FromInput("project_id") reads the caller.
  • FromStep("get_envs", "elements[0].id") reads a prior result.

Example: environments → data-model info → first connection profile. New platform APIs register a path, a client method, and optionally a predefined workflow.

07Auth

Production: each request carries a minted MCP token. Static bearer fallback is off. Headerless calls fail closed. Personas on the token bound which tool groups exist for that caller.

08Logging

One UUID request_id per tool call. Registry logs request_start / request_end / request_failed with duration_ms. Workflows log step start/end. Outbound HTTP logs status. JSON log lines for aggregators.