nuzur
About
nuzur is a model-first database platform for MySQL and PostgreSQL. The MCP server lets any AI assistant or agent (Claude, Cursor, Gemini, or anything else that speaks MCP) design your schema, query your data, generate mi
Details
- Author
- Unknown
- Downloads
- 892
- Transport
- SSE
- Categories
- Database, Infrastructure
Jump to
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
nuzurCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
addCreateRecord
Append a CREATE-record data change to a DRAFT change request. Provide the entity identifier and values keyed by field IDENTIFIER (native values — the server resolves field UUIDs and stringifies). Include a generated uuid value for the primary key when the entity needs one; when a child references a parent created in the same CR, use that parent's generated uuid as the FK value and add the parent first. Pass an optional changeId (a UUID) to make retries idempotent — retrying with the same changeId after a timeout is a no-op instead of a double-add. To append several records at once prefer addCreateRecords. Returns { change_request_uuid, review_status, data_change_count, added } — 'added' echoes the resolved entity/field uuids, the data_change_uuid, and stringified values so you can verify resolution.
addCreateRecords
Append MANY CREATE-record data changes to a DRAFT change request in a SINGLE call (one change-request write instead of one round trip per record). Provide records: a list of { entityIdentifier, values (keyed by field identifier, native values), optional changeId }. Order parents before the children that reference them; a child can use a parent's generated uuid (set earlier in the list) as its FK value. Each record's changeId makes that record's append idempotent. Returns { change_request_uuid, review_status, data_change_count, added_count, deduped_count, added[] }.
addDeleteRecord
Append a DELETE-record data change to a DRAFT change request. Provide the entity identifier and keys (primary-key field values identifying the row), keyed by field IDENTIFIER. Returns the scoped append echo.
addEntity
Add a new entity (table) to a draft project version, optionally with initial fields and indexes. Reference it by identifier; the server mints all UUIDs. Returns { version, entity } — the created, server-normalized entity (diff it against your input to see what the server generated/coerced). type: 1=standalone (default), 2=dependent/embedded.
addEnum
Add a new enum to a draft project version. Provide the identifier and staticValues (convention: first value is 'invalid' with no numericValue, then real values 1,2,3...). The server mints the enum UUID. Returns { version, enum } — read the enum's uuid from the echo to reference it from an enum-typed field (type 22, typeConfig {"enum":{"enum_uuid":"..."}}).
addField
Add a field to an entity in a draft project version. Provide the entity identifier and a compact field spec (identifier, type code, optional required/key/unique/description/typeConfig); the server mints the field UUID. Returns { version, entity } — the affected, server-normalized entity. See nuzur://reference/schema-modeling for field type codes.
addIndex
Add an index to an entity. Provide the entity identifier and an index spec (identifier, type: 1=INDEX/2=PRIMARY/3=UNIQUE/4=FULLTEXT, and the fields by identifier). The server resolves field identifiers to UUIDs. Returns { version, entity } — the affected, server-normalized entity.
addRelationship
Add a foreign-key relationship. Provide the child (fromEntity/fromField holding the FK) and parent (toEntity/toField holding the PK) by identifier; the server resolves UUIDs and sets fields_generated on the from side. cardinality: 1=one-to-one (default), 2=one-to-many. Returns { version, relationship, affected } — the persisted relationship (with resolved from/to endpoint uuids) plus a note that the child entity may have a generated FK field (getEntity to inspect).
addUpdateRecord
Append an UPDATE-record data change to a DRAFT change request. Provide the entity identifier, keys (primary-key field values that identify the row), and set (new values); optionally current (existing values) for diffing. All keyed by field IDENTIFIER, native values. Returns the scoped append echo.
autoLayoutProjectVersion
Re-run the automatic board layout for a draft project version: related entities are grouped into left-to-right clusters with no overlaps, like the editor's auto-layout button. Use after bulk-adding entities and relationships so the diagram reads well. Repositions ALL entities — any manual placement is replaced. Returns { version, laidOutEntities }.
createAutomation
Create an automation: when an approved change request applies a matching data change (entity + operation, optionally field conditions), nuzur POSTs a signed JSON payload to the webhook URL. Conditions are a list of {fieldUuid, changedTo} combined with conditionOperator 'and' (all must hold, default) or 'or' (any one suffices); for enum fields changedTo is the enum's NUMERIC value as a string (e.g. '4'). Delivery is at-least-once with retries — receivers must verify the X-Nuzur-Signature header (hex HMAC-SHA256 of the raw body, 'sha256=' prefix) and dedupe on event_uuid. Returns the signing secret ONCE; it cannot be retrieved later. URLs must be https and public. Reference entities/fields by UUID from the published schema (getProjectVersionLean).
createChangeRequest
Create a new change request for a project version. Use top-level changeType 1 for project DATA changes (2 is for schema/version). Target the PUBLISHED version (review_status 5), never a draft. You can pass an initial dataChanges list here, but for building up records prefer creating the CR with an empty dataChanges list and then using the granular tools addCreateRecord / addCreateRecords (batch) / addUpdateRecord / addDeleteRecord — they reference the entity and fields by IDENTIFIER, resolve UUIDs and stringify values server-side, and append records without re-sending the whole list (addCreateRecords appends many in one call). If you do pass dataChanges here: per-item changeType is 1=update / 2=create / 3=delete, all field values are strings (enums as integer-strings, JSON fields as JSON strings), and parents go before children. See nuzur://reference/data-change-requests.
createProject
Create a new project within a team (the authenticated user must be an admin or developer of that team). Provide teamUuid and name (optional description). The server sets the caller as owner, defaults access to inherit from the team, and creates an initial empty DRAFT project version. Returns the created project including its UUID. Note: Starter plans are limited to 3 active projects.
createProjectVersionDraft
Create a new project version draft based on an existing version or starting empty. Drafts allow project_version (schema) changes to be made and set created_by_uuid to you. Passing basedOnProjectVersionUuid copies the entire schema from that version — this is also the recovery trick for a draft that became invisible. Returns a compact ack { uuid, project_uuid, identifier, version, review_status, status, counts } — call getProjectVersionLean when you need the schema.
createTeam
Create a new team owned by the authenticated user, who is added as its admin. Provide a name; the server provisions default dev/prod environments. Returns the created team including its UUID (use it with createProject).
deleteAutomation
Delete an automation by UUID (also removes its signing secret). Past delivery events are kept for audit until retention purges them. Irreversible — prefer updateAutomation with enabled=false to pause.
deleteEntity
Delete an entity from a draft project version by identifier. Irreversible within the draft. Returns { version, deleted, affected } — affected lists any relationships left orphaned (still referencing the deleted entity) so you can clean them up.
deleteEnum
Delete an enum from a draft project version by identifier. Returns { version, deleted, affected } — affected lists enum-typed fields that still reference the deleted enum so you can update or remove them.
deleteField
Delete a field from an entity by identifier. Returns { version, entity } — the affected entity with the field removed.
deleteIndex
Delete an index from an entity by identifier. Returns { version, entity } — the affected entity with the index removed.
deleteRelationship
Delete a relationship from a draft project version by identifier. Returns { version, deleted }.
describeExtensionConfig
Describe the configuration a generator extension (e.g. go-code-gen) needs to run against a project version. Returns a JSON schema: each config field's identifier, type, whether it's required/multiple, and — for uuid/enum fields — the concrete allowed values (entity/connection/store UUIDs and enum options) so you never guess a UUID. Also returns the last-used config and an `execution` block. NOTE: this server cannot RUN the extension (code generation writes files to the user's local machine); use the returned config with the local nuzur CLI (`nuzur-cli run-extension --config …`). Pass projectUuid, projectVersionUuid, and extensionIdentifier.
discardProjectVersionDraft
Discard/delete a draft project version that has not been approved or published. This is irreversible. Returns a compact ack (uuid, identifier, version, review_status, counts).
getAutomation
Fetch one automation by UUID, including its condition and action config (the signing secret is never returned — it is shown once at creation only).
getAutomationEvent
Fetch one automation delivery event by UUID including its frozen payload — the exact JSON that is POSTed to the receiver (plus event_uuid/sent_at added at delivery time).
getChangeRequest
Fetch the full details of a change request by UUID, including its status, data changes, and review status.
getEntity
Fetch a single entity (its fields, type_config/indexes) from a project version by identifier, in lean form. Lets you inspect one table without pulling the whole model.
getEnum
Fetch a single enum (its static values) from a project version by identifier. Returns { version, enum }.
getProjectVersion
Fetch the full project version (schema, entities, fields, enums) for a given project version UUID. Prefer getProjectVersionLean — the full form emits every type_config variant on every field and is much larger.
getProjectVersionLean
Fetch a project version (schema, entities, fields, enums, relationships) in a compact form: each field's type_config is collapsed to the single sub-key matching its type, and audit/empty noise is stripped. Much smaller than getProjectVersion (which emits every type_config variant on every field) and fits inline. Prefer this for reading or verifying a schema. For decoding field type integer codes, read the nuzur://reference/schema-modeling resource.
getTeam
Fetch full details for a specific team, including its connections. Use this after listTeamsForUser to get connection UUIDs needed for queryProjectData.
issueProvisioningToken
Mint a short-lived (~15 min), single-use provisioning token so a freshly provisioned server can pair its nuzur local agent headlessly (no interactive login) via `nuzur-cli agent pair --provisioning-token <t>`. The returned token is SECRET material that grants one-time agent pairing to the account — ALWAYS confirm with the user before calling this tool. Optionally pass projectUuid to scope the token to a project. Returns { provisioning_token, expires_at }.
listAutomationEvents
List an automation's delivery log (lean — frozen payloads excluded; use getAutomationEvent for one payload). Each event shows status (pending / delivering / delivered / failed / dead), attempts, next_attempt_at, and last_error. Optional status filter and pagination.
listAutomations
List the automations of a project (lean: no payloads). An automation fires a signed webhook when an approved change request touching its watched entity is applied — never on raw agent writes. Returns uuid, name, entity_uuid, operation, condition, action_config, enabled, and status (active / needs_attention / disabled).
listDeploymentRevisions
List one deployment's production history (newest first) — one revision per (re)deploy, so you can see what changed over time and diff a broken deploy against the last working one. Each revision carries the project version, cli version, image tag, deploy time, the provider/server/database/codegen config that shipped, and `status` (in_progress | active | superseded | failed) with a `status_message` — which for an in-flight deploy names the phase underway ("bootstrapping the server", "waiting for the agent to connect", "applying the schema to the database") and for a failed one carries the error. Pass deploymentUuid from listDeployments.
listDeployments
List the authenticated user's deployments (apps + databases launched with `nuzur-cli deploy` on their servers), newest first. Each entry pairs the deployment (identity: host, identifier, project, status) with the revision describing its CURRENT state — provider/region, server ports + URLs, database engine/location, the go-code-gen config (api/auth/custom), the deployed project version, cli version and image tag. Use it to answer "is it up, what's running, and where". Note: `active_revision` is the ACTIVE revision, but for a deployment that never completed one (a first deploy still running, or one that failed) it falls back to the latest attempt — check its `status` (in_progress | active | superseded | failed) and `status_message`. Includes destroyed deployments (kept as history).
listLocalAgents
List all local agents registered under the authenticated user's account. Returns agent metadata (UUID, status, machine name, OS, CLI version) and configured connections.
listProjectVersions
List all versions of a given project. Returns version metadata (UUID, identifier, review status, created_by_uuid, version) without the full schema payload. Use it to pick a version, to read the current `version` immediately before calling updateProjectVersion (optimistic concurrency), and to confirm a draft is still visible to you.
listProjectsForUser
List all Nuzur projects accessible to the authenticated user, optionally filtered by team.
listTeamsForUser
List all teams the authenticated user belongs to. Returns team UUID, name, and status. Use the team UUID when calling queryProjectData or other tools that require a team context.
queryProjectData
Execute a raw SQL SELECT query against a project's database via the Nuzur connection manager (SELECT only — mutating statements are rejected). Returns results as JSON. In the common case pass only projectUuid and query: the connection (team/connection/store or local-agent) and schema default from the project's configured connection. Pass the connection parameters explicitly only to override or when the project has no single configured connection. Target the published version; use this to resolve foreign keys and de-duplicate before building a change request. Columns marked as PII come back masked (e.g. `j***@example.com`) unless you have been granted raw access, and are listed in the response's `masked_columns`; entities restricted by visibility are not readable at all and the query is rejected.
removeDataChange
Remove a pending data change from a DRAFT change request by its zero-based index (to fix a mistake without re-sending the whole list). Returns { change_request_uuid, review_status, data_change_count, removed_index }.
retryAutomationEvent
Requeue a failed or dead automation event for a fresh delivery cycle (attempts reset, picked up by the dispatcher within seconds). The frozen payload is unchanged; only sent_at will differ.
rotateAutomationSecret
Generate a fresh HMAC signing secret for an automation and return it ONCE. The old secret stops signing new deliveries within about a minute (no dual-secret overlap in v1) — update the receiver's configuration immediately after rotating. Use when a secret was lost or may have leaked; the automation, its config, and its delivery history are untouched.
searchProjectsByName
Search for Nuzur projects by name (case-insensitive substring match). Returns matching projects for the authenticated user.
sendProjectVersionForReview
Submit a draft project version for review by a reviewer, creating a review-ready project version change request. Do this only once the schema is complete and verified. Returns a compact ack { uuid, project_uuid, identifier, version, review_status, status, counts } — not the whole schema — so it never overflows on large models.
submitChangeRequestForReview
Submit a draft change request for review by setting its status to IN_REVIEW. Call this once the user is satisfied with the data changes and wants a Nuzur reviewer to approve them. Once submitted the CR is immutable — a mistake found after submission requires a brand-new CR. Returns a lean confirmation { change_request_uuid, review_status, data_change_count, submitted }.
testAutomation
Send a synthetic, signed test delivery to the automation's webhook right now (payload shaped exactly like a real event, with "test": true and sample field values). No outbox row is written. Use it to build and verify a receiver before any real change request exists. Returns success, HTTP status code, and a response snippet.
updateAutomation
Update an automation by UUID. Only the provided attributes change (name, operation, entityUuid, conditions [replaces the whole list, with conditionOperator 'and'/'or'], clearCondition, url, headers, enabled, reactivate). Use enabled=false to pause without deleting; reactivate=true to clear a needs_attention status after fixing the cause. The signing secret is never rotated by this tool — use rotateAutomationSecret.
updateChangeRequest
Update the title, description, or data changes of a DRAFT change request (only DRAFT CRs are editable). Only the fields you provide are updated; omitted fields are left unchanged. Providing dataChanges REPLACES the entire existing list, not a partial merge.
updateEntity
Update attributes of an existing entity: description and/or canvas position (renderX/renderY). Only the attributes you supply change; fields, indexes, and relationships are preserved. Repositioning keeps the card's width/height/collapsed and is overlap-validated — a render:overlap warning is echoed in affected if the moved card collides (the write still succeeds). Returns { version, entity }.
updateEnum
Update an enum: rename it and/or replace its staticValues (providing staticValues REPLACES the whole list — include the values you want to keep). Returns { version, enum } — the server-normalized enum.
updateField
Update attributes of an existing field (description, required, key, unique, deprecated, type/typeConfig, or rename). Only the attributes you supply change; everything else is preserved. Returns { version, entity } — the affected, server-normalized entity.
updateProjectVersion
Replace an entire draft project version. Prefer the granular tools (addEntity, addField, updateField, deleteField, addIndex, deleteIndex, addRelationship, deleteEntity/deleteRelationship) for ordinary edits — they change one piece server-side without you re-sending (or re-transcribing) the whole ~30KB payload. Use this only for a wholesale replace. It is a FULL REPLACE, not a merge — send every entity, enum, and relationship or you drop what you omit. Include the version-level created_by_uuid (= your user uuid) and the current `version` value (read it via listProjectVersions immediately before calling, since it auto-advances). A getProjectVersionLean result round-trips directly (scalar type_configs come back as "", the shape this tool expects). Returns a compact ack { uuid, project_uuid, identifier, version, review_status, status, counts } after the write — call getProjectVersionLean if you need to inspect the persisted schema. See nuzur://reference/schema-modeling for object shapes.
updateRelationship
Update an existing relationship in a draft project version by identifier. Only the attributes you supply change: newIdentifier (rename), cardinality (1=one-to-one, 2=one-to-many), description, useForeignKey. To re-point an endpoint, supply fromEntity+fromField and/or toEntity+toField (by identifier); the server rebuilds that endpoint's resolved uuids. Safe to call concurrently. Returns { version, relationship, affected }.
uploadFieldFile
Upload a file (image, video, audio, or generic file) to an entity field whose type is file/image/video/audio and whose storage type is OBJECT_STORE. The product service uses the field configuration to determine the object store credentials and path. Provide the file content encoded as base64. Returns a signed URL for the uploaded object.
withdrawProjectVersionFromReview
Withdraw a project version from active review, putting it back into draft status. Returns a compact ack (uuid, identifier, version, review_status, counts).
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"nuzur": {
"nuzur": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://ccmcp.nuzur.com"
],
"url": "https://ccmcp.nuzur.com"
}
}
}
}
McpServers
{
"nuzur": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://ccmcp.nuzur.com"
],
"url": "https://ccmcp.nuzur.com"
}
}
nuzur is a model-first database platform for MySQL and PostgreSQL. The MCP server lets any AI assistant or agent (Claude, Cursor, Gemini, or anything else that speaks MCP) design your schema, query your data, generate migrations and a full gRPC/rest API, and deploy it, without ever touching production directly.
Reads are direct and read-only. Every write (schema changes, data changes) becomes a change request you review and approve in nuzur before anything is applied. The agent never holds the pen.
Tools include addEntity, addField, addRelationship, addIndex, queryProjectData, createChangeRequest, submitChangeRequestForReview, and more.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


