
nuzur已验证已精选
关于 nuzur
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.
连接信息
https://ccmcp.nuzur.com接入方式
claude mcp add nuzur --transport http https://ccmcp.nuzur.com工具
57Append 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.
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[] }.
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.
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.
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":"..."}}).
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.
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.
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).
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.
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 }.
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).
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.
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.
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.
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).
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.
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.
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.
Delete a field from an entity by identifier. Returns { version, entity } — the affected entity with the field removed.
Delete an index from an entity by identifier. Returns { version, entity } — the affected entity with the index removed.
Delete a relationship from a draft project version by identifier. Returns { version, deleted }.
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.
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).
Fetch one automation by UUID, including its condition and action config (the signing secret is never returned — it is shown once at creation only).
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).
Fetch the full details of a change request by UUID, including its status, data changes, and review status.
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.
Fetch a single enum (its static values) from a project version by identifier. Returns { version, enum }.
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.
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.
Fetch full details for a specific team, including its connections. Use this after listTeamsForUser to get connection UUIDs needed for queryProjectData.
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 }.
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.
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).
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.
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).
List all local agents registered under the authenticated user's account. Returns agent metadata (UUID, status, machine name, OS, CLI version) and configured connections.
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.
List all Nuzur projects accessible to the authenticated user, optionally filtered by team.
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.
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.
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 }.
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.
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.
Search for Nuzur projects by name (case-insensitive substring match). Returns matching projects for the authenticated user.
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.
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 }.
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.
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.
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.
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 }.
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.
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.
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.
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 }.
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.
Withdraw a project version from active review, putting it back into draft status. Returns a compact ack (uuid, identifier, version, review_status, counts).
概览
Let any AI assistant design, query, and deploy your MySQL or PostgreSQL database — without ever giving it write access to production.
nuzur is a model-first database platform — design the database, ship the backend, own the code. The MCP server exposes your project's schema and data to an agent through a strict asymmetry: reads are direct, writes are proposals. Nothing an agent does reaches your database until you have reviewed and approved it in nuzur.
The agent never holds the pen.
Why this exists
Handing an agent a database connection string is fast and terrifying. The failure modes are well known: a dropped column mid-conversation, an UPDATE without a WHERE, a migration applied to the wrong environment, a schema that drifts away from anything a human designed on purpose.
The usual answers are to grant read-only access — which makes the agent useless for the work you actually want it to do — or to grant write access and hope. nuzur takes a third path: the agent gets full expressive range over proposals, and you keep the commit bit.
How it works
1. The agent reads directly. Schema, entities, fields, relationships, enums, and data are all queryable in real time. No approval needed — reads can't hurt you.
2. The agent proposes changes. Schema work happens in a versioned draft; data work is bundled into a change request. Both are first-class objects in nuzur, not diffs scraped out of a chat log.
3. You review in nuzur. Every proposed change is inspectable in the UI before anything happens — what changed, on which entity, against which version.
4. Approved schema syncs to your database. Migration is a separate, explicit step handled by nuzur's sync extension. Approval and application stay decoupled, so migrations run on your schedule, not the agent's.
What agents can do
Design schema Add and modify entities, fields, enums, indexes, and foreign-key relationships against a versioned model. Auto-layout keeps the visual board readable as the model grows.
Query data Run read-only SQL against the project database through the nuzur connection.
Propose data changes Batch creates, updates, and deletes into a single reviewable change request — including bulk creates in one call.
Generate and deploy The model drives generated SQL migrations, gRPC/Protobuf APIs, Go server scaffolding, and Helm charts. With the nuzur CLI, an agent can take a project from schema to a deployed, running API end to end.
Wire up automations Register webhooks that fire when an approved change request applies a matching data change, with HMAC-signed deliveries, a delivery log, retries, and synthetic test sends.
Tool reference
Discovery
| Tool | Purpose |
|---|---|
listProjectsForUser | List accessible projects |
searchProjectsByName | Find a project by name |
listTeamsForUser / getTeam | Teams and their connections |
listProjectVersions | Version history for a project |
Reading the model
| Tool | Purpose |
|---|---|
getProjectVersion | Full schema: entities, fields, enums, relationships |
getProjectVersionLean | Same, compact — for large schemas |
getEntity / getEnum | Fetch a single entity or enum |
queryProjectData | Read-only SQL against the project database |
Designing schema (draft versions)
| Tool | Purpose |
|---|---|
createProjectVersionDraft | Start a draft from an existing version or empty |
addEntity / updateEntity / deleteEntity | Manage tables |
addField / updateField / deleteField | Manage columns |
addEnum / updateEnum / deleteEnum | Manage enums |
addIndex / deleteIndex | Manage indexes |
addRelationship / updateRelationship / deleteRelationship | Manage foreign keys |
autoLayoutProjectVersion | Re-run automatic board layout |
sendProjectVersionForReview | Submit the draft for human review |
withdrawProjectVersionFromReview | Pull it back to draft |
Proposing data changes
| Tool | Purpose |
|---|---|
createChangeRequest | Open a draft change request |
addCreateRecord / addCreateRecords | Queue one or many inserts |
addUpdateRecord / addDeleteRecord | Queue updates and deletes |
removeDataChange | Drop a queued change |
getChangeRequest | Inspect status and queued changes |
submitChangeRequestForReview | Send it for approval |
Automations
| Tool | Purpose |
|---|---|
createAutomation / updateAutomation / deleteAutomation | Manage webhook automations |
listAutomations / getAutomation | Inspect configured automations |
listAutomationEvents / getAutomationEvent | Delivery log and frozen payloads |
retryAutomationEvent | Requeue a failed delivery |
testAutomation | Send a signed synthetic delivery |
rotateAutomationSecret | Issue a fresh HMAC signing secret |
Deployment
| Tool | Purpose |
|---|---|
listDeployments | Apps and databases launched via nuzur |
listDeploymentRevisions | Production history per deployment |
describeExtensionConfig | Configuration for a generator extension |
issueProvisioningToken | Short-lived token for pairing a new local agent |
Setup
MCP is an open standard, and the nuzur server works with any MCP-enabled client. Verified with Claude, Cursor, and Gemini.
Streamable HTTP endpoint
https://ccmcp.nuzur.com
One-click install — Add to Cursor · Add to VS Code
Claude Code
claude mcp add --transport http nuzur https://ccmcp.nuzur.com
Claude Desktop — add a custom connector under Settings → Connectors with the URL above, or configure it manually:
{
"mcpServers": {
"nuzur": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://ccmcp.nuzur.com"]
}
}
}
Authentication — no API keys to manage. On first connection a browser window opens, you sign in to nuzur, and the client is granted access to the structures you authorize.
Requirements
- A nuzur account — the free plan works
- A published version of your project's data model
- An MCP-compatible AI client
Self-hosted databases are supported through the nuzur local agent, which holds a persistent outbound connection — no inbound ports to open.
Links
- Docs: https://nuzur.com/docs/mcp-connect
- Website: https://nuzur.com
- Discord: https://discord.gg/S45tHanXxC
- Code generation engine (open source, MIT): https://github.com/nuzur/go-code-gen
常见问题
nuzur 远程 MCP 服务器是什么?
nuzur 的远程 MCP 服务器是一个托管的 Model Context Protocol 端点,地址是 https://ccmcp.nuzur.com,AI 助手无需在本地安装或运行任何东西即可连接。
怎么连接 nuzur 的 MCP 服务器?
把端点 https://ccmcp.nuzur.com 添加到任意支持 MCP 的客户端,比如 Claude Code、Cursor 或 VS Code。本页的接入代码块可以一步配置好每个客户端。
nuzur 的 MCP 服务器需要认证吗?
需要。nuzur 使用 OAuth——第一次连接时,你的 MCP 客户端会打开浏览器窗口登录并授权,之后会复用这个凭证。
nuzur 的 MCP 服务器用的是哪种传输方式?
nuzur 暴露的是 Streamable HTTP 端点,这是远程 MCP 服务器普遍使用、主流客户端都支持的传输方式。
评论