Server definition
- Hash
- sha256:2c803189857a872dd7a9687a9ff05dfb085fa9f2cf4c287b303185f6148cf06e
- What it is
- What a remote MCP server returned when asked what it offers: 58 tools
The blob, as servednamed by its sha256
{
"instructions": "Entity Enricher turns model knowledge and uploaded documents into structured data under user-defined schemas. It supports multilingual and multi-model enrichment, fusion, semantic identities, relational database sync and model benchmarks. Schema validation and model agreement do not guarantee factual truth or freshness. Report the evidence actually used and unresolved gaps.\n\nChoose a workflow:\n- Schema authoring: generate_sample → review samples → create_schema_from_sample(entity_samples or sample_record_id). Existing schema documents use save_schema. For targeted edits prefer get_schema_part and property tools; reserve update_schema for full replacements.\n- Documents: upload_attachment supplies reusable sources. generate_sample with attachments is source-only; without attachments it uses knowledge and optional web search. Read the documents guide for multiple files or extraction plus research.\n- Enrichment: select a schema, inspect get_schema's input_contract, then enrich_entity or start_batch_enrichment. Use the published document for database-linked schemas. Never invent caller-owned preserve values. Omitted models/auto suffice for ordinary runs; list_models is a large discovery catalogue for explicit choices or limits.\n- Databases: create_database_sync → poll classification → review model/options → publish_schema. Managed hosts can provision automatically; manual clients pair with the browser-confirmed commands from get_database_setup_instructions. Distinguish generation success, entity-layer admission and replica delivery; relay partial/rejected writes and identity/overwrite warnings.\n- Benchmarks: create_benchmark_scenario tests enrichment, sample generation or schema generation. Set a verified reference except for sample generation, then run_benchmark and read ranked results.\n- Semantic identities: browse concepts and judge review pairs; probe before adding, preview before merging/deleting. Similarities are meaningful only within the same type/model slice.\n\nLong-running calls return job_id: poll get_job_status, relay paused questions with answer_job_question and fetch persisted records. An unavailable job is not proof of success. Inspect failed_models and individual database outcomes even when output exists.\n\nRead on-demand guides through MCP resources/list and resources/read: enricher://docs is the index; descriptions link to specific guides. Routine calls do not require reading all guides. If the client cannot read resources, the same guides are linked from the public MCP documentation. Obtain approval for consequential decisions not already authorized, especially migrations, identity merges/deletes and custody transfer; do not repeatedly ask about the same approved change. Share returned schema_url, record_url, benchmark_url or database_url so the user can inspect the result.",
"tools": [
{
"description": "Acknowledge every delta through up_to_id after successful application, releasing its lease. Acknowledgement can permanently purge delivered deltas and entity state according to registration options; never acknowledge unapplied or failed work. Returns acknowledged and purged counts. No LLM call. Apply/ack workflow: enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"database_id": {
"description": "Database sync UUID.",
"title": "Database Id",
"type": "string"
},
"up_to_id": {
"description": "Acknowledge every delta with id <= this value.",
"minimum": 1,
"title": "Up To Id",
"type": "integer"
}
},
"required": [
"database_id",
"up_to_id"
],
"title": "ack_database_deltasArguments",
"type": "object"
},
"name": "ack_database_deltas",
"outputSchema": {
"additionalProperties": true,
"title": "ack_database_deltasDictOutput",
"type": "object"
}
},
{
"description": "Add a property under the root (parent_path=''), an object path or '$defs.X'. Accepts a scalar, nested object or reference to an existing $defs entity or $enums vocabulary. Requires editor; no LLM call. Omitted nullable means required at enrichment. Adding inside $defs affects every usage site. The same validation and working-copy/publication rules as update_schema_property apply. Read the container with get_schema_part first. Property format: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"definition": {
"additionalProperties": true,
"description": "{type|ref, description?, examples?, nullable?, flags?, properties?} — 'properties' nests the same shape per child for an inline object.",
"title": "Definition",
"type": "object"
},
"name": {
"description": "New property name (letters, digits, underscores).",
"title": "Name",
"type": "string"
},
"parent_path": {
"default": "",
"description": "'' = root, or an object path / '$defs.X'.",
"title": "Parent Path",
"type": "string"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id",
"name",
"definition"
],
"title": "add_schema_propertyArguments",
"type": "object"
},
"name": "add_schema_property",
"outputSchema": {
"additionalProperties": true,
"title": "add_schema_propertyDictOutput",
"type": "object"
}
},
{
"description": "Add an identity concept at zero usage, or add text as an alias using alias_of. Requires editor; resolution may incur embedding/judge cost. Probe first; if the text already resolves to an incumbent, offer that concept instead of blindly retrying. Aliases resolving to another concept are refused. embedding_model selects a new type's space only. Returns concept details and link; manage existing aliases with update_concept_alias. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"alias_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "semantic_id of the concept this text is a surface form of; omit to add a standalone concept.",
"title": "Alias Of"
},
"concept_type": {
"description": "Concept type the text belongs to.",
"title": "Concept Type",
"type": "string"
},
"embedding_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Composite key (provider::model) to embed a NEW concept type under.",
"title": "Embedding Model"
},
"judge_floor": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Similarity at or above which a candidate is put to the identity judge. Omit to use the organization default (Settings → Organization).",
"title": "Judge Floor"
},
"text": {
"description": "The identity text to add.",
"title": "Text",
"type": "string"
}
},
"required": [
"text",
"concept_type"
],
"title": "add_semantic_conceptArguments",
"type": "object"
},
"name": "add_semantic_concept",
"outputSchema": {
"additionalProperties": true,
"title": "add_semantic_conceptDictOutput",
"type": "object"
}
},
{
"description": "Analyze sample property ambiguity and relationship identity scoping before schema generation. Requires editor; billed analysis persists a record but does not modify the sample. Returns findings with competing interpretations and suggested_names, plus identity_scoping for sites mixing an entity's own facts with facts about its parent relationship. Names are judged in their parent context, including missing units, periods or ranges. Apply only approved corrections before create_schema_from_sample. Optional: generate_sample already checks its initial sample. How to interpret findings: enricher://docs/schema-from-sample.",
"inputSchema": {
"properties": {
"model": {
"default": "auto",
"description": "Model composite key. 'auto' (default) lets the server pick the org's default schema-generation model.",
"title": "Model",
"type": "string"
},
"protected_fields": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Leaf names you own (still flagged, but no rename is proposed for them).",
"title": "Protected Fields"
},
"sample_json": {
"additionalProperties": true,
"description": "The sample entity object to analyze.",
"title": "Sample Json",
"type": "object"
}
},
"required": [
"sample_json"
],
"title": "analyze_sampleArguments",
"type": "object"
},
"name": "analyze_sample",
"outputSchema": {
"additionalProperties": true,
"title": "analyze_sampleDictOutput",
"type": "object"
}
},
{
"description": "Analyze a saved schema's property ambiguity and relationship identity scoping, writing annotations to the schema. Requires editor; billed. Incremental by default; force=true rechecks all sites. Returns findings, suggested descriptions, identity-scoping annotations and pending unification proposals; it does not apply suggested structural changes. Fails with ambiguity_check_disabled if the feature is off. Use update_schema_property for approved descriptions or renames; review structural changes and publish them when linked. Interpretation and modeling guidance: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"force": {
"default": false,
"description": "Re-analyze every property, not just unannotated ones.",
"title": "Force",
"type": "boolean"
},
"model": {
"default": "auto",
"description": "Model composite key. 'auto' (default) lets the server pick the org's default schema-generation model.",
"title": "Model",
"type": "string"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "analyze_schemaArguments",
"type": "object"
},
"name": "analyze_schema",
"outputSchema": {
"additionalProperties": true,
"title": "analyze_schemaDictOutput",
"type": "object"
}
},
{
"description": "Resume a paused job with answers to the questions returned under pause. answers maps question IDs to {option_ids: [...], text: ...}; omitted questions use defaults. Relay consequential unanswered choices to the user unless those defaults were already authorized. Resuming may continue billed model work. Returns the next pause, terminal result or running status after wait_seconds; poll get_job_status if still running. Works with generate_sample clarification in both knowledge and source modes. See enricher://docs/documents.",
"inputSchema": {
"properties": {
"answers": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Map of question id -> {option_ids: list[str], text: str | null}. Omit to resume with the planner's defaults.",
"title": "Answers"
},
"job_id": {
"description": "Paused job ID.",
"title": "Job Id",
"type": "string"
},
"wait_seconds": {
"default": 120,
"description": "How long to wait for the job's next pause or completion before returning (0 = return immediately after resuming).",
"maximum": 600,
"minimum": 0,
"title": "Wait Seconds",
"type": "integer"
}
},
"required": [
"job_id"
],
"title": "answer_job_questionArguments",
"type": "object"
},
"name": "answer_job_question",
"outputSchema": {
"additionalProperties": true,
"title": "answer_job_questionDictOutput",
"type": "object"
}
},
{
"description": "Assign or clear the host provisioning a database sync. Requires owner and a sync-enabled plan. host accepts a connected host ID/name; null unassigns it. Assignment may create the physical database and start synchronization automatically. Moving hosts revokes the old host's minted credential; an existing manual pairing is not evicted. Candidates come from create_database_sync or list_database_syncs. No LLM call. Managed and manual setup: enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"database_id": {
"description": "Database sync UUID (from list_database_syncs).",
"title": "Database Id",
"type": "string"
},
"host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sync host id or name; null clears the assignment.",
"title": "Host"
}
},
"required": [
"database_id"
],
"title": "assign_sync_hostArguments",
"type": "object"
},
"name": "assign_sync_host",
"outputSchema": {
"additionalProperties": true,
"title": "assign_sync_hostDictOutput",
"type": "object"
}
},
{
"description": "Request cancellation of a pending, running or paused LLM job. In-flight model calls may finish and persist records; remaining work is skipped. Cancellation does not roll back records or database writes. Read get_job_status and list_records(job_id=...) afterward to inspect the outcome. No new LLM call is started by this tool.",
"inputSchema": {
"properties": {
"job_id": {
"description": "Job ID to cancel.",
"title": "Job Id",
"type": "string"
}
},
"required": [
"job_id"
],
"title": "cancel_jobArguments",
"type": "object"
},
"name": "cancel_job",
"outputSchema": {
"additionalProperties": true,
"title": "cancel_jobDictOutput",
"type": "object"
}
},
{
"description": "Start a billed analysis proposing database keys, SQL types, indexes and relationship ownership on a linked schema. Requires editor. Registration already starts the initial pass; use this after relevant edits. Incremental scope covers new properties or changed JSON types/multilingual flags; an empty scope does not rerun unchanged fields. Returns job_id: poll get_job_status and inspect get_schema's working copy. Correct proposals with property tools, then publish_schema to ship changes. Entity-level indexes and ownership choices: enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"model": {
"default": "auto",
"description": "Model composite key. 'auto' (default) lets the server pick the org's default schema-generation model, falling back to the model that generated the schema.",
"title": "Model",
"type": "string"
},
"schema_id": {
"description": "Saved schema UUID to classify.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "classify_database_modelArguments",
"type": "object"
},
"name": "classify_database_model",
"outputSchema": {
"additionalProperties": true,
"title": "classify_database_modelDictOutput",
"type": "object"
}
},
{
"description": "Create a reusable benchmark with a mandatory scoring judge. scenario_type='enrichment' needs schema_id and entity_data (the entity to enrich, as enrich_entity takes it — refused when it carries no value; never put it in description); 'sample_generation' needs sample_request; 'schema_generation' needs entity_samples (1..20 samples of one entity type). Enrichment and schema generation need a verified gold reference via set_benchmark_reference before running. Sample generation is rubric-scored and takes no reference. Requires owner and a plan with benchmarks; creating the scenario does not run the models. Returns the scenario and link. Next call run_benchmark when its reference requirements are satisfied. See enricher://docs/model-benchmark.",
"inputSchema": {
"properties": {
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Attachment UUIDs included in every run.",
"title": "Attachment Ids"
},
"description": {
"anyOf": [
{
"maxLength": 2000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Free-text note shown in the Benchmarks tab; no model ever reads it. The entity to enrich goes in entity_data, never here.",
"title": "Description"
},
"enable_web_search": {
"default": false,
"description": "sample_generation: ground values with the model's web search.",
"title": "Enable Web Search",
"type": "boolean"
},
"entity_data": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Enrichment (required there): the fixed entity input every model enriches — the same JSON enrich_entity takes. Read get_schema.input_contract first: identifying fields, preserve paths and keys for supplied array items. Refused when it carries no value.",
"title": "Entity Data"
},
"entity_samples": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "schema_generation: the 1..20 fixed input samples (JSON objects of one entity type) every model converts to a schema. Several samples let the scoring read evidence the reference cannot state alone (nullable, types, identity).",
"title": "Entity Samples"
},
"generate_semantic_ids": {
"default": false,
"description": "schema_generation: add semantic_id properties to keyed objects.",
"title": "Generate Semantic Ids",
"type": "boolean"
},
"language": {
"default": "en",
"description": "sample_generation: output language for names + values.",
"title": "Language",
"type": "string"
},
"languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Enrichment: defaults to ['en'].",
"title": "Languages"
},
"name": {
"maxLength": 255,
"minLength": 1,
"title": "Name",
"type": "string"
},
"naming_convention": {
"default": "auto",
"description": "sample_generation: auto | snake_case | camelCase.",
"title": "Naming Convention",
"type": "string"
},
"repetitions": {
"default": 2,
"description": "Run each model N times per run; keeps mean + consistency spread.",
"maximum": 3,
"minimum": 1,
"title": "Repetitions",
"type": "integer"
},
"sample_request": {
"anyOf": [
{
"maxLength": 4000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "sample_generation: the free-text sample request every model answers — the kind of entity, what the sample must contain, any budget or structural preference (same contract as generate_sample's request).",
"title": "Sample Request"
},
"scenario_type": {
"default": "enrichment",
"description": "enrichment | sample_generation | schema_generation (immutable).",
"title": "Scenario Type",
"type": "string"
},
"schema_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "UUID of the saved schema to enrich against (enrichment only, required there).",
"title": "Schema Id"
},
"scoring_judge_model_key": {
"description": "LLM judge composite key used to score results (required).",
"title": "Scoring Judge Model Key",
"type": "string"
},
"strategy": {
"default": "single_pass",
"description": "Enrichment: pinned strategy (no 'auto'): single_pass | expert_domains | multi_expertise",
"title": "Strategy",
"type": "string"
},
"typical_object": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "sample_generation: a specific instance to model (e.g. 'Serena Williams').",
"title": "Typical Object"
}
},
"required": [
"name",
"scoring_judge_model_key"
],
"title": "create_benchmark_scenarioArguments",
"type": "object"
},
"name": "create_benchmark_scenario",
"outputSchema": {
"additionalProperties": true,
"title": "create_benchmark_scenarioDictOutput",
"type": "object"
}
},
{
"description": "Register a saved schema for relational synchronization to PostgreSQL, MySQL or SQLite. Requires owner and a sync-enabled plan. Starts a billed classification job when available; returns database ID, classification_job_id or classification_skipped, stamped_keys and registration_notices. The webhook signing secret stays outside the MCP response and can be managed in the web app. The schema is initially unpublished: wait for classification, review keys/options/notices, then publish_schema before any data can sync. pk_strategy locks once the physical model ships. Owned child arrays replace previous membership, so omitted children are deleted on re-enrichment. purge_entity_state transfers custody to replicas; relay custody_warning. A connected host may provision automatically; otherwise get_database_setup_instructions starts browser-confirmed client pairing. Modeling, publication and delivery: enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"dialect": {
"default": "postgres",
"description": "SQL dialect the deltas are rendered in: postgres | mysql | sqlite.",
"title": "Dialect",
"type": "string"
},
"index_scalars": {
"default": "filterable",
"description": "none: identity/feed indexes; keys: add natural keys and relation access paths; filterable (default): add dates, search intent, spatial/range roles and entity query indexes; all: every scalar. Later changes queue index migrations.",
"title": "Index Scalars",
"type": "string"
},
"key_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Language of multilingual identity tokens (ISO 639-1), shared by all schemas of this database. Usually defaults to schema language when needed; publication may request it after classification. Locked once chosen for the database.",
"title": "Key Language"
},
"name": {
"description": "Name of the physical database (existing on the user's server, or created by `ee-database run --create-missing`); shared by every schema linked to this database sync. Also used (snake-cased) as the conventional replica database name by the ee-database CLI.",
"maxLength": 255,
"minLength": 1,
"title": "Name",
"type": "string"
},
"notify_debounce_s": {
"default": 5,
"description": "Quiet period (seconds) before a delta-available notification fires: each new delta resets the timer, so a burst is announced once. Default 5 for MCP callers (agent workflows expect near-immediate reaction); the web app defaults to 30 to coalesce human-scale editing bursts.",
"maximum": 600,
"minimum": 0,
"title": "Notify Debounce S",
"type": "integer"
},
"on_gaps": {
"default": "skip_children",
"description": "Admission gate — what is written when an enrichment has gaps (non-nullable fields unfilled). 'reject_entity': nothing — one gap anywhere refuses the whole enrichment. 'skip_children' (default): the entity without its incomplete children — an array item is dropped, a shared 1-1 reference is detached (child not written, parent's foreign key NULL); gaps with no such child above them still reject. 'accept_partial': everything — gaps land as NULLs, and under last-write-wins a later partial run erases what an earlier one filled.",
"title": "On Gaps",
"type": "string"
},
"pattern_index_localized_keys": {
"default": false,
"description": "Add per-language pattern-match indexes on indexed localized keys/labels (default false). Useful for prefix autocomplete; increases write/index cost. Concrete SQL depends on the selected dialect.",
"title": "Pattern Index Localized Keys",
"type": "boolean"
},
"pk_strategy": {
"default": "surrogate",
"description": "surrogate (default): physical surrogate IDs with unique schema keys; natural: use schema keys as physical primary keys and restrict later re-keying. Locks once the physical model ships; decide before publication. See enricher://docs/database-sync.",
"title": "Pk Strategy",
"type": "string"
},
"propagate_not_null": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Mirror required schema fields as SQL NOT NULL. Omitted: on for strict gap policies, off for accept_partial. True with accept_partial is refused. Later tightening requires validating existing replica rows; violations can quarantine the migration.",
"title": "Propagate Not Null"
},
"purge_entity_state": {
"default": false,
"description": "Delete fully delivered entity state after every linked database acknowledges it. Transfers custody to replicas, makes server snapshots incomplete and limits duplicate checks. Relay custody_warning and obtain agreement before enabling. Default false.",
"title": "Purge Entity State",
"type": "boolean"
},
"purge_entity_state_delay_days": {
"anyOf": [
{
"maximum": 365,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Grace period for purge_entity_state: a fully-delivered entity row is kept until it has gone this many days without an update, then the hourly purge deletes it. Omit to delete it as soon as every database of the schema acknowledged it.",
"title": "Purge Entity State Delay Days"
},
"purge_on_ack": {
"default": false,
"description": "Delete delivered delta copies once acknowledged.",
"title": "Purge On Ack",
"type": "boolean"
},
"purge_on_ack_delay_days": {
"anyOf": [
{
"maximum": 365,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Grace period for purge_on_ack: keep acknowledged delta copies this many days (from acknowledgement) before the hourly purge deletes them. Omit to delete them at acknowledgement. Bounded by the plan's delta retention ceiling.",
"title": "Purge On Ack Delay Days"
},
"schema_id": {
"description": "Saved schema UUID to connect the database to.",
"title": "Schema Id",
"type": "string"
},
"target_host": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sync host (id or name) that should provision and sync this registration automatically (managed ee-database mode). Omitted: auto-assigned when exactly one eligible host is connected; otherwise the response's connected_hosts lists the candidates — relay the choice to the user and call assign_sync_host, or fall back to get_database_setup_instructions for browser-confirmed manual pairing.",
"title": "Target Host"
}
},
"required": [
"schema_id",
"name"
],
"title": "create_database_syncArguments",
"type": "object"
},
"name": "create_database_sync",
"outputSchema": {
"additionalProperties": true,
"title": "create_database_syncDictOutput",
"type": "object"
}
},
{
"description": "Generate and auto-save a schema from reviewed samples, returning schema_id, schema content and record links. Supply entity_samples (or samples_csv), sample_record_id, or both; explicit samples override stored JSON while attachment inheritance is preserved. Samples must describe one entity type in one language. Generation combines their fields and annotates relationships; it does not redesign the approved structure. Resolve consequential modeling choices and whether to generate semantic IDs before calling; semantic IDs need an organization embedding model and add cost. Requires editor; synchronous and billed. Review returned suggestions before applying edits with property tools. Sample review and canonicalizations: enricher://docs/schema-from-sample; schema format: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "UUIDs used as source context and persisted for regeneration. With sample_record_id, omit to inherit its linked attachments; pass [] to deliberately use none, or a non-empty list to override.",
"title": "Attachment Ids"
},
"entity_samples": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"maxItems": 20,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "1..20 reviewed instances of one entity type. Required without sample_record_id. Explicit samples override stored JSON while keeping attachment inheritance. Fields are unioned; missing/null observations become nullable. Use consistent names across samples and array items. Single-language data only; set multilingual flags after generation with update_schema_property.",
"title": "Entity Samples"
},
"generate_semantic_ids": {
"default": false,
"description": "Add semantic IDs to eligible keyed objects. Requires an organization embedding model and adds resolution cost. Recommend for reusable identities without stable machine keys; obtain agreement before enabling unless already authorized. Defaults false. Modeling guidance: enricher://docs/schema-from-sample.",
"title": "Generate Semantic Ids",
"type": "boolean"
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Language of schema type names/descriptions and annotations; defaults to the sample-key language. Sample property names are not translated. Separate from enrichment output languages.",
"title": "Language"
},
"model": {
"default": "auto",
"description": "Model composite key, or auto (default) for the organization task selection. Explicit keys are discovered through list_models.",
"title": "Model",
"type": "string"
},
"sample_record_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "UUID of a successful sample_generation record. Its stored sample(s) are used when entity_samples is omitted, and its linked attachments are inherited when attachment_ids is omitted.",
"title": "Sample Record Id"
},
"samples_csv": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Samples as CSV text instead of entity_samples (never both): the first row is ALWAYS the header, each data row one sample. Delimiter ',', ';' or tab; headers become identifier keys ('Author Name' -> author_name); each column gets one type (integer, number, boolean or text; empty cell = null; decimal commas read in ';'/tab text). Over 20 rows, 20 are kept, covering every column. Read the result's csv_import and relay the kept rows and renamed headers.",
"title": "Samples Csv"
},
"timeout_seconds": {
"default": 300,
"description": "Wall-clock cap; returns a timeout error past this.",
"maximum": 900,
"minimum": 10,
"title": "Timeout Seconds",
"type": "integer"
}
},
"title": "create_schema_from_sampleArguments",
"type": "object"
},
"name": "create_schema_from_sample",
"outputSchema": {
"additionalProperties": true,
"title": "create_schema_from_sampleDictOutput",
"type": "object"
}
},
{
"description": "Permanently delete an attachment in your organization, including its stored file. No LLM call. Existing records remain, but future calls or schema regeneration cannot reuse the deleted source. Delete only when that source is no longer needed; this is not a required post-enrichment step. Returns the deleted ID and filename.",
"inputSchema": {
"properties": {
"attachment_id": {
"description": "UUID of the attachment to delete.",
"title": "Attachment Id",
"type": "string"
}
},
"required": [
"attachment_id"
],
"title": "delete_attachmentArguments",
"type": "object"
},
"name": "delete_attachment",
"outputSchema": {
"additionalProperties": true,
"title": "delete_attachmentDictOutput",
"type": "object"
}
},
{
"description": "Delete a benchmark scenario and its stored results. Requires owner and a plan with benchmarks. No LLM call; inspect the scenario before deleting it.",
"inputSchema": {
"properties": {
"scenario_id": {
"description": "UUID of the scenario to delete.",
"title": "Scenario Id",
"type": "string"
}
},
"required": [
"scenario_id"
],
"title": "delete_benchmark_scenarioArguments",
"type": "object"
},
"name": "delete_benchmark_scenario",
"outputSchema": {
"additionalProperties": true,
"title": "delete_benchmark_scenarioDictOutput",
"type": "object"
}
},
{
"description": "Delete a database registration and its queued deltas, stopping its feed. Requires owner and a sync-enabled plan; no LLM call. External replica tables remain untouched. Entity state and schema database flags remain by default; delete_entity_state and clear_database_model additionally remove data/model settings from schemas left with no registration. Obtain approval for those irreversible teardown options. See enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"clear_database_model": {
"default": false,
"description": "Also clear the database model those schemas carry (database_key, db_type, index, unique_group, shared, ordered, db_name/db_name_absolute, the classification ledger and the key-language lock), returning them to plain enrichment schemas. Implies delete_entity_state. Irreversible — a later re-link re-classifies from scratch.",
"title": "Clear Database Model",
"type": "boolean"
},
"database_id": {
"description": "Database sync UUID (from list_database_syncs).",
"title": "Database Id",
"type": "string"
},
"delete_entity_state": {
"default": false,
"description": "Also hard-delete the stored entity state of the schemas left with no database (nothing writes to it anymore). Enrichment records are untouched. Irreversible.",
"title": "Delete Entity State",
"type": "boolean"
}
},
"required": [
"database_id"
],
"title": "delete_database_syncArguments",
"type": "object"
},
"name": "delete_database_sync",
"outputSchema": {
"additionalProperties": true,
"title": "delete_database_syncDictOutput",
"type": "object"
}
},
{
"description": "Soft-delete a saved schema by UUID. Requires editor; no LLM call. Restoration and permanent deletion are available in the web app, not through this tool. Returns the deletion outcome.",
"inputSchema": {
"properties": {
"schema_id": {
"description": "UUID of the schema to delete.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "delete_schemaArguments",
"type": "object"
},
"name": "delete_schema",
"outputSchema": {
"additionalProperties": true,
"title": "delete_schemaDictOutput",
"type": "object"
}
},
{
"description": "Delete concepts selected by ids, concept_types or unused_only. Defaults to impact_only=true: review affected records, schemas and replicas before obtaining approval. Execution requires editor; clearing whole types requires owner. Deletion breaks convergence with IDs already stored in replicas; future resolution may mint new IDs. An unused-only deletion still removes that vocabulary. No LLM call. Returns impact counts or deletion results. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"concept_types": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Scope to these concept types; without ids and unused_only this clears the whole types (owner role).",
"title": "Concept Types"
},
"ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Explicit concept semantic_ids to delete.",
"title": "Ids"
},
"impact_only": {
"default": true,
"description": "True = report the blast radius only; False = delete.",
"title": "Impact Only",
"type": "boolean"
},
"unused_only": {
"default": false,
"description": "Only concepts no record references (usage 0).",
"title": "Unused Only",
"type": "boolean"
}
},
"title": "delete_semantic_conceptsArguments",
"type": "object"
},
"name": "delete_semantic_concepts",
"outputSchema": {
"additionalProperties": true,
"title": "delete_semantic_conceptsDictOutput",
"type": "object"
}
},
{
"description": "Enrich one entity against exactly one of schema_id or target_schema, returning structured output, record_id, costs and any database outcome. Read get_schema's input_contract first (published version when linked); never invent preserve values. Models may be omitted for auto selection. Generation is billed. Two or more models fuse only when all succeed: check failed_models before reporting success. A failed leg prevents automatic fusion and database admission. classification_warning returns success=false, error_code and classification; bypass only after user confirmation. Database sync defaults on: report database.status and database_warning, including partial writes or overwrites; admission is not proof of replica delivery. Recovery and fusion: enricher://docs/enrichment-and-fusion. This tool does not expose web-search activation.",
"inputSchema": {
"properties": {
"arbitration_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional LLM model key used to resolve fusion conflicts when 2+ models are selected. Without this, conflicts are resolved by deterministic voting.",
"title": "Arbitration Model"
},
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "UUIDs of attachments (from upload_attachment) to provide as source material for this enrichment.",
"title": "Attachment Ids"
},
"classification_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional pre-flight classifier model key. When set, the entity is type-checked before enrichment to catch mismatches.",
"title": "Classification Model"
},
"database_sync": {
"default": true,
"description": "Whether this run feeds the schema's entity layer and linked databases. Leave true for normal enrichments. Set false for the one-model recovery leg of a failed fusion run (see the recovery ladder above): the merge_records call that follows is what should write, so the intermediate single-model write is skipped. The record itself is still saved either way.",
"title": "Database Sync",
"type": "boolean"
},
"entity_data": {
"additionalProperties": true,
"description": "Entity identifiers and supplied values. Read get_schema.input_contract first: preserve paths and keys for supplied array items are required. Identifying field names are guidance; arbitrary names are accepted.",
"title": "Entity Data",
"type": "object"
},
"force_after_classification_warning": {
"default": false,
"description": "Set to true to bypass a previous classification warning. Use only after explicit user confirmation.",
"title": "Force After Classification Warning",
"type": "boolean"
},
"languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 639-1 codes; defaults to ['en'] server-side. The first language is the primary one used for all non-multilingual string fields; multilingual fields get one value per language.",
"title": "Languages"
},
"models": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Model composite keys. Omit or pass ['auto'] for one automatically selected model; auto alone never fuses. Use list_models for explicit choices and model-count limits.",
"title": "Models"
},
"schema_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "UUID of a saved schema. Mutually exclusive with target_schema.",
"title": "Schema Id"
},
"strategy": {
"default": "auto",
"description": "auto (default — server picks from the schema) | single_pass (simple schemas, 1 LLM call) | expert_domains (medium schemas with clear domains) | multi_expertise (large multi-domain schemas, parallel per-expertise calls — best quality, higher cost)",
"title": "Strategy",
"type": "string"
},
"target_schema": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Inline JSON Schema document in the supported Entity Enricher dialect; prefer schema_id. Format: enricher://docs/schema-reference.",
"title": "Target Schema"
},
"timeout_seconds": {
"default": 300,
"description": "Wall-clock cap. Past it the call returns `enrichment_timeout` with the job_id and the job is cancelled — a leg still in flight may finish and persist a partial record, reachable via list_records(job_id=...) and recoverable with retry_expertises. Multi-model fusion runs and reasoning models routinely need more than the default; raise it or use start_batch_enrichment (async).",
"maximum": 900,
"minimum": 10,
"title": "Timeout Seconds",
"type": "integer"
}
},
"required": [
"entity_data"
],
"title": "enrich_entityArguments",
"type": "object"
},
"name": "enrich_entity",
"outputSchema": {
"additionalProperties": true,
"title": "enrich_entityDictOutput",
"type": "object"
}
},
{
"description": "Read the next ordered window of SQL deltas and canonical payloads for a database sync. claim=false is replayable; claim=true leases the window for 120 seconds. Apply a claimed window transactionally, including schema deltas, before ack_database_deltas. limit is also bounded by the registration's page_limit. snapshot_required pauses delivery until the replica reapplies its snapshot. No LLM call. Leasing, cursors, quarantine and snapshot handling: enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"claim": {
"default": false,
"description": "Lease the window (requires ack).",
"title": "Claim",
"type": "boolean"
},
"database_id": {
"description": "Database sync UUID (from list_database_syncs).",
"title": "Database Id",
"type": "string"
},
"limit": {
"default": 50,
"maximum": 500,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"since": {
"default": 0,
"description": "Cursor: return deltas with id > since.",
"minimum": 0,
"title": "Since",
"type": "integer"
}
},
"required": [
"database_id"
],
"title": "fetch_database_deltasArguments",
"type": "object"
},
"name": "fetch_database_deltas",
"outputSchema": {
"additionalProperties": true,
"title": "fetch_database_deltasDictOutput",
"type": "object"
}
},
{
"description": "Generate editable sample JSON from a free-text request for schema authoring. Without attachments, use model knowledge and optional web search; with attachments, extract from the sources only (search does not relax that rule). Each sample is one instance in one language; set sample_count separately from request. Attachments force one sample. Requires editor; generation is billed. Returns a job_id and may already be paused or complete: relay pause questions through answer_job_question, otherwise poll get_job_status. Review returned samples and warnings before create_schema_from_sample; do not silently change facts or structure. For relationship modeling, multiple documents or hybrid extraction plus research, read enricher://docs/schema-from-sample and enricher://docs/documents.",
"inputSchema": {
"properties": {
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "UUIDs from upload_attachment. Providing any attachment switches the call into source mode: transcribe the document or describe visible photo attributes only, with an interactive planner.",
"title": "Attachment Ids"
},
"auto_answer": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Omit or false to pause for clarification; true authorizes standard interpretations and planner defaults without asking, in either mode.",
"title": "Auto Answer"
},
"enable_web_search": {
"default": false,
"description": "Use builtin search in knowledge mode (default false). Source mode remains source-only. With an explicit unsupported model this option is ignored. Hybrid tasks: enricher://docs/documents.",
"title": "Enable Web Search",
"type": "boolean"
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Output language code for the generated field names AND values (e.g. 'en', 'fr'); an explicit code applies even when attachments are in another language. Omitted (default) → the generator follows the language the request is written in (its text and any typical object), else the attachment's, else English.",
"title": "Language"
},
"model": {
"default": "auto",
"description": "Auto (default) chooses the organization task model with attachment/search capabilities. Explicit provider::model bypasses this capability matching; provider combinations or quota may still fail.",
"title": "Model",
"type": "string"
},
"naming_convention": {
"default": "auto",
"description": "auto | snake_case | camelCase",
"title": "Naming Convention",
"type": "string"
},
"request": {
"default": "",
"description": "Entity type, desired fields, scope and size/depth budget. Required without attachments; optional source-mode instructions otherwise. Put the number of instances in sample_count, not in this text.",
"maxLength": 4000,
"title": "Request",
"type": "string"
},
"sample_count": {
"default": 1,
"description": "Number of same-type instances (1..20), default 1. Consider 3 varied instances when designing a schema. Attachments force 1. Inspect samples_note for under-delivery or the cap.",
"maximum": 20,
"minimum": 1,
"title": "Sample Count",
"type": "integer"
},
"typical_objects": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to sample_count concrete instances to anchor knowledge mode (e.g. ['Sanofi', 'Pfizer']), one per generated sample in order — slots beyond len(typical_objects) are named by the model's own instance roster. In source mode the attachment remains authoritative and this is ignored.",
"title": "Typical Objects"
},
"wait_seconds": {
"default": 120,
"description": "How long to wait for the first pause or completion before returning (0 = return the job_id immediately).",
"maximum": 600,
"minimum": 0,
"title": "Wait Seconds",
"type": "integer"
}
},
"title": "generate_sampleArguments",
"type": "object"
},
"name": "generate_sample",
"outputSchema": {
"additionalProperties": true,
"title": "generate_sampleDictOutput",
"type": "object"
}
},
{
"description": "Read one benchmark scenario with per-model quality, cost and speed results. include_reference=true adds the reference, the fixed entity_data and the schema-generation entity_samples. Config changes can make existing results stale. No LLM call. For a ranked subset use get_benchmark_scenario_results. Read after run_benchmark completes.",
"inputSchema": {
"properties": {
"include_reference": {
"default": false,
"description": "Include reference_output + entity_data (can be large).",
"title": "Include Reference",
"type": "boolean"
},
"scenario_id": {
"description": "UUID of the scenario.",
"title": "Scenario Id",
"type": "string"
}
},
"required": [
"scenario_id"
],
"title": "get_benchmark_scenarioArguments",
"type": "object"
},
"name": "get_benchmark_scenario",
"outputSchema": {
"additionalProperties": true,
"title": "get_benchmark_scenarioDictOutput",
"type": "object"
}
},
{
"description": "Filter, rank and limit a scenario's per-model benchmark results. No LLM call. overall blends quality, speed and cost using organization task weights and is null if a component is missing. Status tags are independent: success does not exclude stale or stale_score results. Missing sort metrics come last in either direction. See enricher://docs/model-benchmark for interpretation.",
"inputSchema": {
"properties": {
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep only the top N after sorting (None = all).",
"title": "Limit"
},
"model_keys": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep only these model composite keys (empty/None = every model).",
"title": "Model Keys"
},
"providers": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep only these provider names (empty/None = every provider).",
"title": "Providers"
},
"scenario_id": {
"description": "UUID of the scenario.",
"title": "Scenario Id",
"type": "string"
},
"sort_by": {
"default": "overall",
"description": "Metric to sort by.",
"enum": [
"overall",
"quality",
"cost",
"speed",
"last_run"
],
"title": "Sort By",
"type": "string"
},
"sort_order": {
"default": "desc",
"description": "Sort direction.",
"enum": [
"asc",
"desc"
],
"title": "Sort Order",
"type": "string"
},
"status": {
"anyOf": [
{
"items": {
"enum": [
"success",
"failed",
"stale",
"stale_score",
"unscored"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep results carrying ANY of these tags: success | failed | stale (config_hash changed since this run, re-run it) | stale_score (reference/scoring config changed since scored, rescore it) | unscored (ran fine, never scored). Empty/None = every status.",
"title": "Status"
}
},
"required": [
"scenario_id"
],
"title": "get_benchmark_scenario_resultsArguments",
"type": "object"
},
"name": "get_benchmark_scenario_results",
"outputSchema": {
"additionalProperties": true,
"title": "get_benchmark_scenario_resultsDictOutput",
"type": "object"
}
},
{
"description": "Return non-secret install, browser-confirmed pairing and run instructions for an ee-database sync client. Requires owner and a sync-enabled plan; no LLM call and no credential is issued or exposed to the MCP client. Run pair_command on the intended replica host: the CLI opens verification_url, the user chooses the database and confirms, and the credential travels directly to the polling CLI. Its DSN stays on that host. Use manual pairing only when managed host provisioning is not already handling the registration. Setup: enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"database_id": {
"description": "Database sync UUID (from list_database_syncs).",
"title": "Database Id",
"type": "string"
}
},
"required": [
"database_id"
],
"title": "get_database_setup_instructionsArguments",
"type": "object"
},
"name": "get_database_setup_instructions",
"outputSchema": {
"additionalProperties": true,
"title": "get_database_setup_instructionsDictOutput",
"type": "object"
}
},
{
"description": "List observed values outside each open enum's current vocabulary, with counts from recent enrichment records. No LLM call. Use the report to propose admitted members or rejected_values, or close a vocabulary only when it is exhaustive. This read does not edit the enum. An open enum allows other values; a closed one constrains output to its members. Named enums can be read with get_schema_part and changed through update_schema. See enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "get_enum_candidatesArguments",
"type": "object"
},
"name": "get_enum_candidates",
"outputSchema": {
"additionalProperties": true,
"title": "get_enum_candidatesDictOutput",
"type": "object"
}
},
{
"description": "Read a job's status, progress and compact terminal summary with persisted record IDs. Status is pending, running, paused, completed, failed or cancelled. Relay pause questions with answer_job_question. include_result=true returns full terminal details; batch summaries count entities and database outcomes. A failed job is not usable output; inspect individual records for partial recovery. Unknown IDs may be invalid, expired or lost after restart: look for persisted outputs with list_records(job_id=...), without assuming success. events_after=<seq> adds the job's event log past that cursor (per-model completions, scoring progress, pauses) — the poll equivalent of the SSE stream; pass the returned last_seq next time. No LLM call. Polling, failure and recovery guidance: enricher://docs/enrichment-and-fusion.",
"inputSchema": {
"properties": {
"events_after": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Event-log cursor: 0 returns the job's events from the start, a previous call's last_seq returns only the newer ones (at most 100 per call; events_has_more says when to call again). Omit to skip the log.",
"title": "Events After"
},
"include_result": {
"default": false,
"description": "Include the full terminal result payload (can be large). Default returns a compact scalar summary per model.",
"title": "Include Result",
"type": "boolean"
},
"job_id": {
"description": "Job ID returned by a start tool.",
"title": "Job Id",
"type": "string"
}
},
"required": [
"job_id"
],
"title": "get_job_statusArguments",
"type": "object"
},
"name": "get_job_status",
"outputSchema": {
"additionalProperties": true,
"title": "get_job_statusDictOutput",
"type": "object"
}
},
{
"description": "Read one persisted record's structured_output, entity_input_data, validation errors, expertise verdicts and metrics. failed_expertises and partial identify incomplete work even when output exists; use retry_expertises only on a record with failed domains. Fusion metadata identifies its source models and arbitration method. database_sync, when present, reports admission and per-replica delivery state. Returns record_url and the related schema link. No LLM call. Interpretation and recovery: enricher://docs/enrichment-and-fusion.",
"inputSchema": {
"properties": {
"record_id": {
"description": "UUID of the record.",
"title": "Record Id",
"type": "string"
}
},
"required": [
"record_id"
],
"title": "get_recordArguments",
"type": "object"
},
"name": "get_record",
"outputSchema": {
"additionalProperties": true,
"title": "get_recordDictOutput",
"type": "object"
}
},
{
"description": "Read a saved schema with its properties, annotations and input_contract. Before enrichment, use version='published' for a database-linked schema; default 'working' is for editing. identifying_keys guide entity naming; preserve values belong to the caller and are required; each supplied array item must carry its array_item_keys. Never invent caller-owned values. The response includes version, publish_state and schema_url. A requested published contract that does not exist returns not_found. For a small edit prefer get_schema_part. No LLM call. Contract details: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
},
"version": {
"default": "working",
"description": "'working' (default) — the editable copy updates/edits apply to; 'published' — the contract enrichment and database sync use (only meaningful for schemas linked to a database sync).",
"title": "Version",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "get_schemaArguments",
"type": "object"
},
"name": "get_schema",
"outputSchema": {
"additionalProperties": true,
"title": "get_schemaDictOutput",
"type": "object"
}
},
{
"description": "Read only the schema fragment needed for an edit. Omit path for the root/type index; use '$defs.X' or '$enums.X' for a definition, an object path for its subtree, or a leaf path for its property card and relations. Dot-separated paths use '[]' for array items. The response identifies shared definition usage, identity participation, database flags and whether entity state or linked databases exist. Editing a $defs property affects every usage site. Reads the working copy; no LLM call. Path examples: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Omit for the index; else a property/object path or '$defs.X'/'$enums.X'.",
"title": "Path"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "get_schema_partArguments",
"type": "object"
},
"name": "get_schema_part",
"outputSchema": {
"additionalProperties": true,
"title": "get_schema_partDictOutput",
"type": "object"
}
},
{
"description": "Read one concept's aliases, identity source keys, linked records and nearest neighbors within its own type/model slice. Record links are capped; records_truncated signals omitted links. neighbors_limit=0 skips neighbors. Use returned alias IDs with update_concept_alias and similarities to assess a proposed merge. No LLM call. Never compare similarities across embedding spaces or concept types. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"concept_id": {
"description": "The concept's semantic_id (UUID).",
"title": "Concept Id",
"type": "string"
},
"neighbors_limit": {
"default": 50,
"maximum": 200,
"minimum": 0,
"title": "Neighbors Limit",
"type": "integer"
}
},
"required": [
"concept_id"
],
"title": "get_semantic_conceptArguments",
"type": "object"
},
"name": "get_semantic_concept",
"outputSchema": {
"additionalProperties": true,
"title": "get_semantic_conceptDictOutput",
"type": "object"
}
},
{
"description": "Read organization-wide record totals, success rate, tokens and cost summary. No LLM call. This tool has no job filter; use list_records(job_id=...) for a particular run and benchmark tools for comparative quality/cost/speed scores.",
"inputSchema": {
"properties": {},
"title": "get_statsArguments",
"type": "object"
},
"name": "get_stats",
"outputSchema": {
"additionalProperties": true,
"title": "get_statsDictOutput",
"type": "object"
}
},
{
"description": "Resolve 1..1000 texts against one concept type. mint=false returns exact/matched/would_mint outcomes without minting; mint=true creates misses and requires owner (reporting requires editor). Resolution can call embeddings and the identity judge even in report mode. Review would_mint rows before authorizing creation. A new type may be initialized with embedding_model; existing types cannot switch spaces through import. Returns per-text outcomes. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"concept_type": {
"description": "Concept type (slice) to resolve against.",
"title": "Concept Type",
"type": "string"
},
"embedding_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Composite key (provider::model) seeding a NEW concept type's slice — an import may open the type it resolves into. Refused when that type's vocabulary already lives in another model.",
"title": "Embedding Model"
},
"judge_floor": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Similarity at or above which a candidate is put to the identity judge. Omit to use the organization default (Settings → Organization).",
"title": "Judge Floor"
},
"mint": {
"default": false,
"description": "False = report only; True = create the unmatched rows (owner role).",
"title": "Mint",
"type": "boolean"
},
"texts": {
"description": "Identity texts to resolve (1..1000).",
"items": {
"type": "string"
},
"title": "Texts",
"type": "array"
}
},
"required": [
"texts",
"concept_type"
],
"title": "import_semantic_conceptsArguments",
"type": "object"
},
"name": "import_semantic_concepts",
"outputSchema": {
"additionalProperties": true,
"title": "import_semantic_conceptsDictOutput",
"type": "object"
}
},
{
"description": "List compact benchmark scenario summaries and total. Scenarios test enrichment, sample generation or schema generation. No LLM call. Read one with get_benchmark_scenario or create one with create_benchmark_scenario. Lifecycle and reference requirements: enricher://docs/model-benchmark.",
"inputSchema": {
"properties": {},
"title": "list_benchmark_scenariosArguments",
"type": "object"
},
"name": "list_benchmark_scenarios",
"outputSchema": {
"additionalProperties": true,
"title": "list_benchmark_scenariosDictOutput",
"type": "object"
}
},
{
"description": "List a saved schema's database registrations, linked schemas, options and sync hosts. Returns pending and quarantined delta counts, projection_upgrade_pending and database links. No LLM call. Pending zero alone does not prove healthy delivery: check quarantine and migration blockers. Use list_entity_states for server-side rows and get_record for per-record delivery state. PostgreSQL, MySQL and SQLite delivery is performed by the user's sync client. See enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"schema_id": {
"description": "Saved schema UUID.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "list_database_syncsArguments",
"type": "object"
},
"name": "list_database_syncs",
"outputSchema": {
"additionalProperties": true,
"title": "list_database_syncsDictOutput",
"type": "object"
}
},
{
"description": "Browse a schema's current merged entity rows, not per-run records. Requires editor; no LLM call. Returns identities, revision, last_record_id and optionally payload, with limit/offset pagination. Rejected entities have no row; purge_entity_state may also remove delivered rows. Server-side state does not prove the external replica has applied its deltas. Use get_record and list_database_syncs for delivery and rejection diagnostics. See enricher://docs/database-sync.",
"inputSchema": {
"properties": {
"entity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter to one entity type (the response lists the types present).",
"title": "Entity Type"
},
"include_payload": {
"default": true,
"description": "Include each entity's current merged payload. Set false for a compact identity-only listing (keys, revision, last_record_id).",
"title": "Include Payload",
"type": "boolean"
},
"limit": {
"default": 20,
"maximum": 200,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"title": "Offset",
"type": "integer"
},
"schema_id": {
"description": "Saved schema UUID.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id"
],
"title": "list_entity_statesArguments",
"type": "object"
},
"name": "list_entity_states",
"outputSchema": {
"additionalProperties": true,
"title": "list_entity_statesDictOutput",
"type": "object"
}
},
{
"description": "List available model keys, nominal capabilities, languages, strategies, auto-selected defaults and organization profile_limits. Use when choosing explicit models or checking plan limits; ordinary calls may omit models or use auto without fetching this large catalogue. Auto also accounts for attachment capabilities. is_available means a usable provider key exists, not that provider quota or every combination of tools and media will work. Missing capability flags mean unsupported on this discovery surface. default_models_web_search is a search-only preview, not attachment-specific. No LLM call. Model selection and costs: enricher://docs/enrichment-and-fusion.",
"inputSchema": {
"properties": {},
"title": "list_modelsArguments",
"type": "object"
},
"name": "list_models",
"outputSchema": {
"additionalProperties": true,
"title": "list_modelsDictOutput",
"type": "object"
}
},
{
"description": "List compact, paginated records in your organization, most recent first. Filter by job_id to retrieve persisted outputs of an asynchronous workflow; type, success, model and search further narrow the result. Both per-model enrichment and arbitration records may exist for one entity. Use get_record for full output and failures; use list_entity_states for current merged entity state instead of run history. No LLM call. Fetch every page when a job produces more than one page of records.",
"inputSchema": {
"properties": {
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter to a single job (every model + expertise in one batch shares one job_id).",
"title": "Job Id"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by model composite key (e.g. 'anthropic::claude-sonnet-4-6').",
"title": "Model"
},
"page": {
"default": 1,
"minimum": 1,
"title": "Page",
"type": "integer"
},
"page_size": {
"default": 20,
"maximum": 100,
"minimum": 1,
"title": "Page Size",
"type": "integer"
},
"record_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by type: enrichment | classification | arbitration | sample_generation | schema_generation | schema_edit | schema_annotation | ambiguity_analysis | db_classification | benchmark_scoring | playground",
"title": "Record Type"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Substring match against the entity's `name` field in the output.",
"title": "Search"
},
"success": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True = only successful records; False = only failed.",
"title": "Success"
}
},
"title": "list_recordsArguments",
"type": "object"
},
"name": "list_records",
"outputSchema": {
"additionalProperties": true,
"title": "list_recordsDictOutput",
"type": "object"
}
},
{
"description": "List saved schemas in your organization, pinned first. Returns compact summaries with IDs, names and links; no LLM call. Use get_schema to inspect a chosen schema and its input contract, or get_schema_part for a targeted edit. For a database-linked schema, enrich against its published version; the working copy may contain unpublished changes.",
"inputSchema": {
"properties": {},
"title": "list_schemasArguments",
"type": "object"
},
"name": "list_schemas",
"outputSchema": {
"additionalProperties": true,
"title": "list_schemasDictOutput",
"type": "object"
}
},
{
"description": "Browse organization concepts with aliases, usage counts and type/model facets. view='review' returns pairs escalated by the identity judge, not merely similar pairs. Returns a filtered page; use get_semantic_concept for details and neighbors. Similarities are comparable only within one concept_type/embedding_model slice. No LLM call. Vocabulary review and curation: enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"concept_types": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Restrict to these concept types (empty/None = every type).",
"title": "Concept Types"
},
"limit": {
"default": 50,
"maximum": 200,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"min_ref_count": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Only concepts used by at least this many records.",
"title": "Min Ref Count"
},
"offset": {
"default": 0,
"minimum": 0,
"title": "Offset",
"type": "integer"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Substring match against concept texts.",
"title": "Search"
},
"sort_by": {
"default": "ref_count",
"description": "ref_count | text | concept_type | created_at",
"title": "Sort By",
"type": "string"
},
"sort_order": {
"default": "desc",
"enum": [
"asc",
"desc"
],
"title": "Sort Order",
"type": "string"
},
"view": {
"default": "concepts",
"description": "'concepts' = filtered concept page; 'review' = pairs the identity judge left for a person: escalated (unsure), found duplicated while answering another question, or separated at a similarity high enough to double-check.",
"enum": [
"concepts",
"review"
],
"title": "View",
"type": "string"
}
},
"title": "list_semantic_conceptsArguments",
"type": "object"
},
"name": "list_semantic_concepts",
"outputSchema": {
"additionalProperties": true,
"title": "list_semantic_conceptsDictOutput",
"type": "object"
}
},
{
"description": "Fuse two or more records of the same entity into a new arbitration record. Without arbitration_model use voting, median and union rules; with an arbiter, conflicts may incur LLM cost. Returns output, conflicts, fusion metadata and a new record ID. The merged result can feed linked databases and overwrite current entity values. Inspect database warnings and the actual fusion method; an arbiter failure can fall back to rules. Use this after separately recovered model runs, not to merge different entities. See enricher://docs/enrichment-and-fusion.",
"inputSchema": {
"properties": {
"arbitration_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Model composite key for LLM arbitration (None = rule-based).",
"title": "Arbitration Model"
},
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Attachments passed to the arbitration LLM (ignored for rule-based merges).",
"title": "Attachment Ids"
},
"result_ids": {
"description": "UUIDs of the enrichment records to merge (minimum 2).",
"items": {
"type": "string"
},
"minItems": 2,
"title": "Result Ids",
"type": "array"
}
},
"required": [
"result_ids"
],
"title": "merge_recordsArguments",
"type": "object"
},
"name": "merge_records",
"outputSchema": {
"additionalProperties": true,
"title": "merge_recordsDictOutput",
"type": "object"
}
},
{
"description": "Merge a loser concept into a winner. Defaults to impact_only=true: inspect counts and affected replicas before obtaining approval to execute. impact_only=false requires owner and rewrites aliases, entity identities and referencing payloads, queuing convergence to linked replicas. No LLM call. Similarity alone does not establish identity; inspect get_semantic_concept and the judge review evidence first. Returns impact or merge results. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"impact_only": {
"default": true,
"description": "True = report the merge's blast radius only; False = merge (owner role).",
"title": "Impact Only",
"type": "boolean"
},
"loser_id": {
"description": "semantic_id of the concept folded into the winner.",
"title": "Loser Id",
"type": "string"
},
"winner_id": {
"description": "semantic_id of the concept that survives.",
"title": "Winner Id",
"type": "string"
}
},
"required": [
"winner_id",
"loser_id"
],
"title": "merge_semantic_conceptsArguments",
"type": "object"
},
"name": "merge_semantic_concepts",
"outputSchema": {
"additionalProperties": true,
"title": "merge_semantic_conceptsDictOutput",
"type": "object"
}
},
{
"description": "Inspect or migrate the organization's concept embedding space. action='status' is read-only; preview, start and cancel require owner. preview estimates cost and reports potential collisions; review them before authorizing start. target_model is required for preview/start; source_model and concept_types scope the move. Starting launches billed background re-embedding while enrichment continues, then switches the selected slices after coverage is complete. Cancel marks the transition cancelled; it does not guarantee interruption or rollback of in-flight work. Returns migration status or preview. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"action": {
"description": "status | preview | start | cancel",
"enum": [
"status",
"preview",
"start",
"cancel"
],
"title": "Action",
"type": "string"
},
"concept_types": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Restrict the move to these concept types; empty = the whole space.",
"title": "Concept Types"
},
"source_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Embedding space to move; omitted = the org's current default.",
"title": "Source Model"
},
"target_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Composite key (provider::model) to move to. Required for preview/start.",
"title": "Target Model"
}
},
"required": [
"action"
],
"title": "migrate_semantic_embeddingsArguments",
"type": "object"
},
"name": "migrate_semantic_embeddings",
"outputSchema": {
"additionalProperties": true,
"title": "migrate_semantic_embeddingsDictOutput",
"type": "object"
}
},
{
"description": "Move one property into the root, an object path or '$defs.X', preserving its flags and expertise. Requires editor; no LLM call. Moving into a definition changes every usage site. An identity composition naming the property is re-spelled automatically when the destination stays within the same 1-1 closure (identity_rebound reports it); the move is refused when it would take the key out of that closure or leave a semantic ID with no identity material, and on collisions or recursive containment. Read source and destination with get_schema_part first. Structural changes on database-linked schemas require publish_schema. Paths and migration guidance: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"new_parent_path": {
"default": "",
"description": "'' = root, or an object path / '$defs.X'.",
"title": "New Parent Path",
"type": "string"
},
"path": {
"description": "Property path, e.g. 'ceremonies[].ceremony_type'.",
"title": "Path",
"type": "string"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id",
"path"
],
"title": "move_schema_propertyArguments",
"type": "object"
},
"name": "move_schema_property",
"outputSchema": {
"additionalProperties": true,
"title": "move_schema_propertyDictOutput",
"type": "object"
}
},
{
"description": "Materialize an entity region from get_schema's x-entityMap. Ordinary flat members (e.g. product_id, product_name on an order line) move into a new object named after the region, regions hanging from it move along (nest them in turn inside the new object), pairing facts stay on the host, and the moved names shed the region's tokens (product_name → name) unless strip_prefix=false. Compact scalar occurrences (e.g. manufacturer_name or each therapeutic_classes[] item) are all converted to references to one shared $defs entity; host_path and strip_prefix do not apply to that form. host_path is '' for the root, an object path, 'path[]' for an array's items, or '$defs.X'. Defaults to dry_run=true: inspect the returned schema_content and notes, then persist with dry_run=false only after approval of the change. Requires editor; no LLM call. Database-linked structural edits still require publish_schema. Modeling consequences: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"dry_run": {
"default": true,
"description": "Report the rewrite without persisting it (the default).",
"title": "Dry Run",
"type": "boolean"
},
"host_path": {
"default": "",
"description": "Container holding the flat members ('' = root, object path, 'path[]', '$defs.X').",
"title": "Host Path",
"type": "string"
},
"region_id": {
"description": "Entity region id from x-entityMap.regions (get_schema).",
"title": "Region Id",
"type": "string"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
},
"strip_prefix": {
"default": true,
"description": "Drop the region's name tokens from the moved field names.",
"title": "Strip Prefix",
"type": "boolean"
}
},
"required": [
"schema_id",
"region_id"
],
"title": "nest_schema_regionArguments",
"type": "object"
},
"name": "nest_schema_region",
"outputSchema": {
"additionalProperties": true,
"title": "nest_schema_regionDictOutput",
"type": "object"
}
},
{
"description": "Preview identity resolution without adding a concept or increasing its usage. Requires editor; uncached resolution may call embeddings and the identity judge. Returns exact_hit, match or no_match, the matched concept and neighbors. Probe before adding; a matched incumbent may already represent the intended entity. embedding_model can select the space for a new concept type, not change an existing type's space. Inspect judge evidence as well as similarity. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"concept_type": {
"description": "Concept type (slice) to resolve against.",
"title": "Concept Type",
"type": "string"
},
"embedding_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Composite key (provider::model) to embed a NEW concept type under.",
"title": "Embedding Model"
},
"judge_floor": {
"anyOf": [
{
"maximum": 1,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Similarity at or above which a candidate is put to the identity judge. Omit to use the organization default (Settings → Organization).",
"title": "Judge Floor"
},
"neighbors": {
"default": 10,
"maximum": 200,
"minimum": 1,
"title": "Neighbors",
"type": "integer"
},
"text": {
"description": "The identity text to resolve.",
"title": "Text",
"type": "string"
}
},
"required": [
"text",
"concept_type"
],
"title": "probe_semantic_conceptArguments",
"type": "object"
},
"name": "probe_semantic_concept",
"outputSchema": {
"additionalProperties": true,
"title": "probe_semantic_conceptDictOutput",
"type": "object"
}
},
{
"description": "Publish a database-linked schema's working copy as the contract used by enrichment and replicas. A newly linked schema sends nothing until first publication; unlinked drafts cannot be published. Requires editor; no LLM call. Call validate_only=true to inspect the diff, blockers, warnings and per-database migration_sql. Transform migrations require user-approved confirm_transforms=true; cross-schema conflicts remain blockers. key_language may be required if classification revealed a multilingual key. Returns publication state; queued migrations apply asynchronously on replicas. See enricher://docs/database-sync for the review and delivery workflow.",
"inputSchema": {
"properties": {
"confirm_transforms": {
"default": false,
"description": "Acknowledge a transform migration (re-key, type change, or a column/table rename) run against the replicas' own data. Required when the preview says requires_confirm — ALWAYS show the transforms to the user and get their explicit approval before passing true.",
"title": "Confirm Transforms",
"type": "boolean"
},
"key_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 639-1 language for multilingual identity tokens. Normally adopted from the database lock. Supply when key_language_required requests a choice; review the suggested language with the user. Shared by all schemas of that database.",
"title": "Key Language"
},
"schema_id": {
"description": "UUID of the schema to publish.",
"title": "Schema Id",
"type": "string"
},
"validate_only": {
"default": false,
"description": "Dry-run: return the diff + blockers without publishing.",
"title": "Validate Only",
"type": "boolean"
}
},
"required": [
"schema_id"
],
"title": "publish_schemaArguments",
"type": "object"
},
"name": "publish_schema",
"outputSchema": {
"additionalProperties": true,
"title": "publish_schemaDictOutput",
"type": "object"
}
},
{
"description": "Resolve one pending entity-type unification proposal from get_schema. action='accept' maps the proposed site onto the winning $def; field_map overrides proposed correspondences. Unmapped fields are retained as nullable; other usages of the winning definition are affected. action='dismiss' keeps the sites separate. Defaults to dry_run=true: inspect the returned schema_content and notes, then persist with dry_run=false only after approval of the change. Requires editor; no LLM call. Database-linked structural edits still require publish_schema. Modeling consequences: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"action": {
"description": "'accept' or 'dismiss'.",
"title": "Action",
"type": "string"
},
"dry_run": {
"default": true,
"description": "Report the rewrite without persisting it (the default).",
"title": "Dry Run",
"type": "boolean"
},
"field_map": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "accept only: override of the loser→winner field correspondence.",
"title": "Field Map"
},
"proposal_id": {
"description": "Proposal id from x-entityMap.proposals (get_schema).",
"title": "Proposal Id",
"type": "string"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
}
},
"required": [
"schema_id",
"proposal_id",
"action"
],
"title": "resolve_unify_proposalArguments",
"type": "object"
},
"name": "resolve_unify_proposal",
"outputSchema": {
"additionalProperties": true,
"title": "resolve_unify_proposalDictOutput",
"type": "object"
}
},
{
"description": "Retry only an existing record's failed expertise domains, then update its output and attempt the run's fusion/synchronization. Billed for retried work. Requires failed_expertises on that record (get_record); a surviving successful sibling is not retryable and returns no_failed_expertises. Supply its entity_input_data and saved_schema_id; model optionally substitutes the failed model. Returns job_id: poll get_job_status, then re-read get_record. When the failed leg left no record, use a one-model enrich_entity with database_sync=false followed by merge_records instead. Recovery decisions: enricher://docs/enrichment-and-fusion.",
"inputSchema": {
"properties": {
"entity_data": {
"additionalProperties": true,
"description": "The record's original entity input (get_record -> entity_input_data).",
"title": "Entity Data",
"type": "object"
},
"languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 639-1 codes; defaults to ['en'].",
"title": "Languages"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Model to retry with (provider::model from list_models). Defaults to the record's own model — pass a stronger one when a domain fails repeatedly on it (retrying the same model that just failed usually fails again). Only the failed domains are re-run and re-billed; the record stays attributed to its original model.",
"title": "Model"
},
"record_id": {
"description": "Enrichment record with failed expertises.",
"title": "Record Id",
"type": "string"
},
"schema_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Saved schema UUID (get_record -> saved_schema_id). Or pass target_schema.",
"title": "Schema Id"
},
"target_schema": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Raw schema dict when no saved schema exists.",
"title": "Target Schema"
}
},
"required": [
"record_id",
"entity_data"
],
"title": "retry_expertisesArguments",
"type": "object"
},
"name": "retry_expertises",
"outputSchema": {
"additionalProperties": true,
"title": "retry_expertisesDictOutput",
"type": "object"
}
},
{
"description": "Undo automatic edits a scoring pass made to a scenario's reference. Every scoring pass folds what the scored models showed the reference should be (a candidate the judge found better, a rule the samples prove, a value the reference lacked) and writes it into the reference — an edit a pass already made is only replaced by stronger evidence (samples, a wrong verdict, more agreeing models), never by one more model's better verdict; the log is reference_meta.auto_applied on get_benchmark_scenario, each entry with its inverse patch. Pass the revision ids to undo: the inverse is applied, the entry is marked reverted and its (path, attribute) is pinned so no later pass re-applies it (a manual set_benchmark_reference lifts every pin). Scores never go stale from this. Requires owner and a plan with benchmarks. No LLM call.",
"inputSchema": {
"properties": {
"revision_ids": {
"description": "Ids of the reference_meta.auto_applied entries to undo (1..200).",
"items": {
"type": "string"
},
"title": "Revision Ids",
"type": "array"
},
"scenario_id": {
"description": "UUID of the scenario.",
"title": "Scenario Id",
"type": "string"
}
},
"required": [
"scenario_id",
"revision_ids"
],
"title": "revert_benchmark_reference_updatesArguments",
"type": "object"
},
"name": "revert_benchmark_reference_updates",
"outputSchema": {
"additionalProperties": true,
"title": "revert_benchmark_reference_updatesDictOutput",
"type": "object"
}
},
{
"description": "Start billed asynchronous execution and scoring of a benchmark. Requires owner, a benchmark-enabled plan and a judge; a verified reference is also required except for sample generation. Supply model_keys or providers; omitting both runs all active models with usable provider keys. Repetitions and judging increase cost. Returns job_id and total_models: poll get_job_status, then read get_benchmark_scenario_results. Re-running replaces each selected model's previous result. An organization's benchmark runs and scoring passes execute one at a time: a launch while another is in flight is queued (queue_position, status 'pending'), and a launch on a scenario whose run is still queued folds its models into that run (merged=true, job_id names the queued run). Reference setup and score interpretation: enricher://docs/model-benchmark.",
"inputSchema": {
"properties": {
"model_keys": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Explicit model composite keys. Overrides `providers`.",
"title": "Model Keys"
},
"providers": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Provider names (e.g. ['anthropic', 'mistral']) — runs every active model of those providers that has a valid key.",
"title": "Providers"
},
"scenario_id": {
"description": "UUID of the scenario to run.",
"title": "Scenario Id",
"type": "string"
}
},
"required": [
"scenario_id"
],
"title": "run_benchmarkArguments",
"type": "object"
},
"name": "run_benchmark",
"outputSchema": {
"additionalProperties": true,
"title": "run_benchmarkDictOutput",
"type": "object"
}
},
{
"description": "Save a directly authored schema and return its ID and link. Requires editor; no LLM call or generation charge. schema_content is a JSON Schema 2020-12 document in Entity Enricher's supported dialect: title, type='object', properties, optional $defs and x-* extension sections. The server validates it and makes colliding names unique. Entity definitions, enum vocabularies and localized fields have different projection rules. Unknown keywords are dropped, not rejected: read ignored_keywords (path, keyword, hint) and applied_repairs in the result — a property flag such as semantic_id placed on a $defs entity object lands there, with the level it is read at. Use create_schema_from_sample to derive a schema from data, or update_schema for an existing schema. A minimal valid example and supported annotations are in enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"is_pinned": {
"default": false,
"description": "Pin it to the top of listings.",
"title": "Is Pinned",
"type": "boolean"
},
"name": {
"maxLength": 255,
"minLength": 1,
"title": "Name",
"type": "string"
},
"schema_content": {
"additionalProperties": true,
"description": "Full schema document: title, type=object, properties and optional $defs/x-* sections. See enricher://docs/schema-reference for a minimal example.",
"title": "Schema Content",
"type": "object"
},
"tags": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tags.",
"title": "Tags"
}
},
"required": [
"name",
"schema_content"
],
"title": "save_schemaArguments",
"type": "object"
},
"name": "save_schema",
"outputSchema": {
"additionalProperties": true,
"title": "save_schemaDictOutput",
"type": "object"
}
},
{
"description": "Save the gold reference for an enrichment or schema-generation benchmark. Only set reference_verified=true after checking its values against trusted evidence or obtaining human sign-off; a generated answer alone is not verification. Schema-generation references must be GeneratedJsonSchema objects. Sample-generation scenarios reject references because they are rubric-scored. Requires owner and a plan with benchmarks; no LLM call. A verified reference enables run_benchmark. See enricher://docs/model-benchmark.",
"inputSchema": {
"properties": {
"reference_output": {
"additionalProperties": true,
"description": "Expected entity JSON for enrichment, or a schema document for schema_generation. Sample-generation scenarios do not accept a reference.",
"title": "Reference Output",
"type": "object"
},
"reference_verified": {
"default": false,
"description": "Explicit sign-off that the reference is correct (required to run).",
"title": "Reference Verified",
"type": "boolean"
},
"scenario_id": {
"description": "UUID of the scenario.",
"title": "Scenario Id",
"type": "string"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Provenance: generated | pasted | record (default 'pasted').",
"title": "Source"
},
"source_record_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Record UUID the reference was copied from (when source='record').",
"title": "Source Record Id"
}
},
"required": [
"scenario_id",
"reference_output"
],
"title": "set_benchmark_referenceArguments",
"type": "object"
},
"name": "set_benchmark_reference",
"outputSchema": {
"additionalProperties": true,
"title": "set_benchmark_referenceDictOutput",
"type": "object"
}
},
{
"description": "Start billed asynchronous enrichment of an entity list against exactly one of schema_id or target_schema. Returns job_id and total. No fixed entity-count cap; live prompt quotas and credits can stop remaining work. Each entity follows the enrichment/fusion pipeline; every model must succeed for its automatic fusion and database admission. A confident classification mismatch skips that entity without enrichment, never pauses the batch. Poll get_job_status, then list_records(job_id=...). Attachments apply to every entity. Unlike enrich_entity, this tool exposes neither database_sync=false nor web-search activation. Input contracts, partial results and recovery: enricher://docs/batch-enrichment.",
"inputSchema": {
"properties": {
"arbitration_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional LLM for auto-fusion conflict resolution (None = rule-based).",
"title": "Arbitration Model"
},
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Attachment UUIDs applied as source material to every entity.",
"title": "Attachment Ids"
},
"classification_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional classifier key. Confident mismatches skip that entity; softer verdicts become prompt context. Batch classification never pauses.",
"title": "Classification Model"
},
"entities": {
"description": "Entities to enrich (each a free-form dict naming the entity — the schema's identifying fields ideally, but any field names work).",
"items": {
"additionalProperties": true,
"type": "object"
},
"minItems": 1,
"title": "Entities",
"type": "array"
},
"languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 639-1 codes; defaults to ['en'].",
"title": "Languages"
},
"models": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Model composite keys (call list_models to discover them). Optional: omit (or pass ['auto']) to let the server pick the org's default model — pinned per-task default if set, else the best blended benchmark score.",
"title": "Models"
},
"schema_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "UUID of a saved schema. Mutually exclusive with target_schema.",
"title": "Schema Id"
},
"strategy": {
"default": "auto",
"description": "auto (default) | single_pass | expert_domains | multi_expertise",
"title": "Strategy",
"type": "string"
},
"target_schema": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Inline schema document in the supported Entity Enricher dialect. Prefer schema_id to link records. See enricher://docs/schema-reference.",
"title": "Target Schema"
}
},
"required": [
"entities"
],
"title": "start_batch_enrichmentArguments",
"type": "object"
},
"name": "start_batch_enrichment",
"outputSchema": {
"additionalProperties": true,
"title": "start_batch_enrichmentDictOutput",
"type": "object"
}
},
{
"description": "Validate and inject stored or supplied enrichment output into the entity layer and linked syncs. May incur semantic-resolution cost. record_id alone reuses its output; adding structured_output creates a new derived record. Without record_id, supply structured_output and saved_schema_id. Each item uses the current published contract and admission gate. Only enrichment/arbitration records qualify; base records whose fusion is in the same request are skipped. Inspect each outcome for rejected or partial writes. Use after fixing a rejected output or an enrich_entity run with database_sync=false. See enricher://docs/enrichment-and-fusion.",
"inputSchema": {
"properties": {
"items": {
"description": "Entities to inject. Each item: {record_id?, structured_output?, saved_schema_id?} — at least one of record_id / structured_output, and saved_schema_id required when there is no record_id.",
"items": {
"additionalProperties": true,
"type": "object"
},
"maxItems": 100,
"minItems": 1,
"title": "Items",
"type": "array"
}
},
"required": [
"items"
],
"title": "sync_records_to_databaseArguments",
"type": "object"
},
"name": "sync_records_to_database",
"outputSchema": {
"additionalProperties": true,
"title": "sync_records_to_databaseDictOutput",
"type": "object"
}
},
{
"description": "Edit a benchmark's test definition or scoring configuration. Requires owner and a plan with benchmarks; no model run. Only supplied fields change, but sample_params and schema_gen_params replace their parameter objects wholesale. The judge may be replaced, not cleared; scenario_type is immutable. Changed test definitions make previous results stale. Re-run affected models to refresh their scores. See enricher://docs/model-benchmark.",
"inputSchema": {
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Free-text note shown in the Benchmarks tab; no model ever reads it.",
"title": "Description"
},
"entity_data": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Enrichment: replacement fixed entity input (same contract as enrich_entity's entity_data; refused when it carries no value).",
"title": "Entity Data"
},
"entity_samples": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "schema_generation: replacement input samples (1..20, whole list).",
"title": "Entity Samples"
},
"languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Languages"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"repetitions": {
"anyOf": [
{
"maximum": 3,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Repetitions"
},
"sample_params": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "sample_generation: full replacement task params object {request, typical_object, naming_convention, language, enable_web_search}.",
"title": "Sample Params"
},
"scenario_id": {
"description": "UUID of the scenario.",
"title": "Scenario Id",
"type": "string"
},
"schema_gen_params": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "schema_generation: full replacement task params object {generate_semantic_ids}.",
"title": "Schema Gen Params"
},
"schema_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New saved-schema UUID.",
"title": "Schema Id"
},
"scoring_judge_model_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scoring Judge Model Key"
},
"scoring_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Feed this scenario's results into the live per-model scores of the options API: 'organization' (owner+), 'global' (system admin only, fallback for orgs without their own source), or 'off' to stop using it.",
"title": "Scoring Source"
},
"strategy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Strategy"
}
},
"required": [
"scenario_id"
],
"title": "update_benchmark_scenarioArguments",
"type": "object"
},
"name": "update_benchmark_scenario",
"outputSchema": {
"additionalProperties": true,
"title": "update_benchmark_scenarioDictOutput",
"type": "object"
}
},
{
"description": "Remove or promote a concept alias using alias IDs from get_semantic_concept. Requires editor; no LLM call. action='remove' stops that surface form resolving to this concept; removing the last alias is refused. action='set_canonical' changes its displayed form. To add an alias use add_semantic_concept(alias_of=...). Returns the outcome. See enricher://docs/semantic-ids.",
"inputSchema": {
"properties": {
"action": {
"description": "'remove' prunes the surface form; 'set_canonical' promotes it.",
"enum": [
"remove",
"set_canonical"
],
"title": "Action",
"type": "string"
},
"alias_id": {
"description": "The surface-form row's own id (UUID).",
"title": "Alias Id",
"type": "string"
},
"concept_id": {
"description": "The concept's semantic_id (UUID).",
"title": "Concept Id",
"type": "string"
}
},
"required": [
"concept_id",
"alias_id",
"action"
],
"title": "update_concept_aliasArguments",
"type": "object"
},
"name": "update_concept_alias",
"outputSchema": {
"additionalProperties": true,
"title": "update_concept_aliasDictOutput",
"type": "object"
}
},
{
"description": "Edit a saved schema's metadata or replace its full schema_content without an LLM call. Requires editor. Only supplied values change. For one property, prefer update_schema_property, add_schema_property or move_schema_property. Replacements must use GeneratedJsonSchema; unknown keywords are dropped, not rejected, and reported in ignored_keywords / applied_repairs. On database-linked schemas this edits the working copy: neutral edits propagate automatically; structural edits take effect after publish_schema. Returns the updated schema and link. Contract and edit workflow: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"ambiguity_check_enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Enable/disable the ambiguity check for this schema — the pass that flags properties whose name admits more than one meaning (gates analyze_schema and the generation post-pass).",
"title": "Ambiguity Check Enabled"
},
"is_pinned": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Pin or unpin.",
"title": "Is Pinned"
},
"key_language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Pre-set the key language for multilingual database keys ahead of a database link (ISO 639-1). Settable only while the schema has no linked database and no entity state; locked afterwards.",
"title": "Key Language"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New name (must be unique).",
"title": "Name"
},
"schema_content": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Full replacement schema document, following get_schema.schema_content. See enricher://docs/schema-reference.",
"title": "Schema Content"
},
"schema_id": {
"description": "UUID of the schema to update.",
"title": "Schema Id",
"type": "string"
},
"tags": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Replacement tag list.",
"title": "Tags"
}
},
"required": [
"schema_id"
],
"title": "update_schemaArguments",
"type": "object"
},
"name": "update_schema",
"outputSchema": {
"additionalProperties": true,
"title": "update_schemaDictOutput",
"type": "object"
}
},
{
"description": "Edit or remove one property by path without replacing the full schema. Requires editor; no LLM call. Only supplied fields change; null clears an entry in flags. Server validation rejects or normalizes invalid combinations and reports applied_repairs. Editing inside $defs affects every usage site. Removing an identity-source member is refused until its identity is recomposed. Renames preserve identity references and record migration intent. Database-linked schemas remain working-copy edits until publish_schema; inspect migration_grade. For additions or relocation use add_schema_property or move_schema_property. Paths, flags and rename rules: enricher://docs/schema-reference.",
"inputSchema": {
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"examples": {
"anyOf": [
{
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Examples"
},
"flags": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Flag updates (null clears): expertise, preserve, multilingual, language_discriminator, identifying, nullable, format, pattern, semantic_id, judge_floor, semantic_concept_type, semantic_embedding_model, database_key, db_type, db_type_length, index, unique_group, shared, ordered, db_name, db_name_absolute.",
"title": "Flags"
},
"new_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Rename the property.",
"title": "New Name"
},
"path": {
"description": "Property path, e.g. 'ceremonies[].ceremony_type'.",
"title": "Path",
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "'#/$defs/X' or '#/$enums/X'; clears type.",
"title": "Ref"
},
"remove": {
"default": false,
"description": "Delete the property instead.",
"title": "Remove",
"type": "boolean"
},
"schema_id": {
"description": "UUID of the saved schema.",
"title": "Schema Id",
"type": "string"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New JSON type (string/number/integer/boolean/array/object); clears $ref.",
"title": "Type"
}
},
"required": [
"schema_id",
"path"
],
"title": "update_schema_propertyArguments",
"type": "object"
},
"name": "update_schema_property",
"outputSchema": {
"additionalProperties": true,
"title": "update_schema_propertyDictOutput",
"type": "object"
}
},
{
"description": "Upload base64 file bytes as reusable source material; returns id and requires_capability. Pass the ID in attachment_ids to sample/schema generation, enrichment or benchmarks. Supported format handling depends on server MIME policy: extracted text or model-readable binary. Prefer auto model selection for attachment capabilities. Uploading does not itself run an LLM. A generated sample with attachments is source-only; see enricher://docs/documents for formats, multiple-file behavior and research workflows. Retain attachments needed for later runs or regeneration.",
"inputSchema": {
"properties": {
"content_base64": {
"description": "The file's bytes, base64-encoded (no data: prefix).",
"title": "Content Base64",
"type": "string"
},
"filename": {
"description": "Original filename including extension (e.g. 'report.pdf').",
"minLength": 1,
"title": "Filename",
"type": "string"
},
"media_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional MIME hint; the server still sniffs the magic bytes.",
"title": "Media Type"
}
},
"required": [
"filename",
"content_base64"
],
"title": "upload_attachmentArguments",
"type": "object"
},
"name": "upload_attachment",
"outputSchema": {
"additionalProperties": true,
"title": "upload_attachmentDictOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:2c803189857a872dd7a9687a9ff05dfb085fa9f2cf4c287b303185f6148cf06e | sha256sum