nuzur mcp
nuzur's MCP server lets AI agents propose database schema and data changes as reviewable change requests — no direct write access.
What it can do
- 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 cr
- 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
- 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
What data it sees
Do you need an account
No: the server works without sign-in
nuzur's MCP server lets AI agents propose database schema and data changes as reviewable change requests — no direct write access. Connect Claude Code, Cursor, or any MCP client to model, query, and modify MySQL/PostgreSQL databases with human-in-the-loop approval.
How to connect
How to connect nuzur mcp to Claude
The server address to paste into Claude settings:
https://ccmcp--nuzur.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect nuzur mcp to ChatGPT
The server address to paste into ChatGPT settings:
https://ccmcp--nuzur.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect nuzur mcp to Cursor
The server address to paste into Cursor settings:
https://ccmcp--nuzur.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (33)
Raw names from tools/list. Only developers need these.
| 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). |
| createChangeRequest | Create a new change request (draft) for a project version, including the list of data changes. Use top-level changeType 1 for project DATA changes (2 is for schema/version). Target the PUBLISHED version (review_status 5), never a draft. Per-item changeType is 1=update / 2=create / 3=delete; each dataChanges item takes only changeType plus one of create/update/delete (no uuid/order). All field values are strings; enums are integer-strings and JSON fields are JSON strings. Place parent records before the children that reference them. See nuzur://reference/data-change-requests for payload shapes. |
| 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. |
| 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 }. |
| discardProjectVersionDraft | Discard/delete a draft project version that has not been approved or published. This is irreversible. |
| 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. |
| 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. Requires a connection UUID and team UUID (remote) or local-agent UUIDs from the project's configured connections. Target the published version; use this to resolve foreign keys and de-duplicate before building a change request. |
| 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. |
| 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. |
| 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. |
| 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 the freshly re-fetched persisted version (not a stale snapshot). See nuzur://reference/schema-modeling for object shapes. |
| 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. |