MCP Server

Novence

ai.novence/mcp
Cloud & Infrastructure Developer Tools Public & reachable MCP 2025-11-25

What this MCP does

Provides hosted tools for creating, validating, deploying, and hosting static websites.

accept_project_invite
Accept project invite
Accept an invite token (from email or invite_project_member in local/dev). Unverified invitees must pass otp. Returns a project-scoped nv_ key once — never email it. Collaborating uses this project_id; create_project still bills the caller.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['token'], 'properties': {'otp': {'type': 'string', 'description': 'Email OTP required when the invitee is not yet verified. Optional if already verified.'}, 'token': {'type': 'string', 'description': 'Invite token from the invitation email (or invite_project_member in local/dev).'}}, 'additionalProperties': False}
billing_portal
Billing portal
Stripe Customer Portal URL for an existing subscriber (manage/cancel). Not first-time subscribe — use checkout or mpp_upgrade for that.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'return_url': {'type': 'string', 'format': 'uri', 'description': 'Browser URL after leaving the Stripe portal. Optional.'}}, 'additionalProperties': False}
bootstrap
Bootstrap account
Create an account + nv_ API key from an email. No Bearer key required. Unverified trial still publishes; OTP/verify_email is AFTER the live URL. Returns apiKey immediately — do not wait for OTP.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'email': {'type': 'string', 'format': 'email', 'description': 'Account email. Receives the OTP after the first live URL.'}}, 'additionalProperties': False}
checkout
Stripe Checkout
Return a Stripe Checkout URL for Pro ($29) or Scale. Requires nv_ + verified email. Use after a 2nd project or a 402 — never after the first live URL.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'plan': {'enum': ['pro', 'scale'], 'type': 'string', 'default': 'pro', 'description': 'Paid plan to subscribe. Defaults to pro.'}, 'cancel_url': {'type': 'string', 'format': 'uri', 'description': 'Browser return URL if the customer cancels Checkout. Optional.'}, 'success_url': {'type': 'string', 'format': 'uri', 'description': 'Browser return URL after successful payment. Optional.'}}, 'additionalProperties': False}
configure_custom_domain
Configure custom domain
Attach a custom domain. For site domains, enables apex+www. Default primary=www. Required DNS: CNAME www → fallback.novence.ai. Then do exactly one apex option: ALIAS/ANAME/CNAME-flattening @ → fallback.novence.ai, or registrar URL-redirect @ → https://www.{domain}/. Pass primary=apex only when the apex must serve (ALIAS required; URL-redirect would loop).
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'hostname'], 'properties': {'primary': {'enum': ['www', 'apex'], 'type': 'string', 'description': 'Which host is canonical. Default www.'}, 'hostname': {'type': 'string', 'description': 'Custom hostname (e.g. example.com or www.example.com).'}, 'redirect': {'type': 'boolean', 'description': 'If true, redirect the non-primary host to the primary. Default true.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
confirm_upload
Confirm upload
Record one staged file after the client PUT to the presigned URL from get_upload_url. Use confirm_uploads_batch when several files were uploaded. Does not publish the site — call deploy after confirms. Re-confirming the same path updates metadata.
Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'path'], 'properties': {'path': {'type': 'string', 'description': 'Site-relative path (e.g. index.html or css/app.css). No leading slash required.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file. Optional; inferred from the path extension when omitted.'}}, 'additionalProperties': False}
confirm_uploads_batch
Confirm uploads (batch)
Confirm many uploads after get_upload_urls_batch PUTs. 200 body is { files, errors }. errors is always an array (empty on full success); retry only failed paths. Use confirm_upload for a single file. Does not deploy.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'files'], 'properties': {'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Site-relative path (e.g. index.html or css/app.css). No leading slash required.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file. Optional; inferred from the path extension when omitted.'}}, 'additionalProperties': False}, 'description': 'Same paths that were presigned and PUT.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
create_account_session
Create account session
Mint a short-lived mgmt_ token for a local HTML console (account:read, billing:portal, project:members). Never put nv_ keys in HTML.
Input schema
{'type': 'object', 'properties': {}}
create_form
Create form
Create a Novence form on a project (optional — sites may use Formspree/Web3forms instead). Returns submit URLs for edge + public API.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Display name for the form in the account.'}, 'slug': {'type': 'string', 'description': 'URL slug. Optional; generated from name if omitted.'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'HTML field name submitted with the form.'}, 'type': {'enum': ['text', 'email', 'tel', 'url', 'textarea', 'number', 'select', 'checkbox', 'hidden'], 'type': 'string', 'description': 'Input type rendered in the hosted form.'}, 'label': {'type': 'string', 'description': 'Visible label. Defaults to name if omitted.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Choices for type=select.'}, 'required': {'type': 'boolean', 'description': 'Whether the visitor must fill this field.'}}, 'additionalProperties': False}, 'default': [], 'description': 'Field definitions. Empty array allowed; add fields later with update_form.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'notify_email': {'anyOf': [{'anyOf': [{'not': {}}, {'type': 'string', 'format': 'email'}]}, {'type': 'null'}], 'description': 'Where to email new submissions. Optional.'}, 'honeypot_field': {'type': 'string', 'description': 'Hidden field name used as a spam honeypot. Optional.'}}, 'additionalProperties': False}
create_project
Create project
Create a new hosting project on the caller's account (counts against the caller's project quota). To edit a shared site, pass that project's project_id to upload/deploy tools instead.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable project name.'}, 'description': {'type': 'string', 'description': 'Optional notes stored on the project. Not shown on the live site.'}}, 'additionalProperties': False}
delete_file
Delete file
Remove one path from staging. Does not change the already-live deploy until the next deploy. Irreversible for that staged path; re-upload to restore. Use delete_form_submission for form PII, not this.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'path'], 'properties': {'path': {'type': 'string', 'description': 'Site-relative path (e.g. index.html or css/app.css). No leading slash required.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
delete_form_submission
Delete form submission
Permanently delete one form submission (PII). Does not disable the form — use update_form status=disabled. Irreversible.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'form_id', 'submission_id'], 'properties': {'form_id': {'type': 'string', 'format': 'uuid', 'description': 'Form UUID from create_form or list_forms.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'submission_id': {'type': 'string', 'format': 'uuid', 'description': 'Submission UUID from list_form_submissions.'}}, 'additionalProperties': False}
deploy
Deploy site
Publish the site. Verified accounts run quality checks; unverified accounts skip checks (checkRuns: 0) and still go live. POST returns quickly — poll get_deployment_status until live or failed. Do not retry POST while status is promoting or checking.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'force': {'type': 'boolean', 'description': 'If true, publish even when quality checks would block. Optional; default false.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_account
Get account
Full account snapshot: profile, subscription, quotas, usage, projects. Use get_quotas_and_usage for limits only; use get_account_console_kit to render a local HTML console. Read-only.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {}}
get_account_console_kit
Get account console kit
JSON kit to write a local novence-console.html: snapshot, HTML template, session mint instructions. Serve on localhost. Use create_account_session for the mgmt_ token; use get_account for JSON without the kit. Read-only.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {}}
get_checks_results
Get check results
Read Lighthouse, a11y, and link results for a deployment. Omit deployment_id for the latest. Use run_checks to trigger a new cycle; use get_deployment_status for publish/promote state, not scores.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'deployment_id': {'type': 'string', 'format': 'uuid', 'description': "Specific deployment UUID. Omit to use the project's latest deployment."}}, 'additionalProperties': False}
get_deployment_status
Get deployment status
Poll publish state after deploy (queued, checking, promoting, live, failed). Omit deployment_id for the latest. Use get_checks_results for Lighthouse/a11y scores and get_preview_url once live. Read-only; do not retry deploy while promoting or checking.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'deployment_id': {'type': 'string', 'format': 'uuid', 'description': "Specific deployment UUID. Omit to use the project's latest deployment."}}, 'additionalProperties': False}
get_domain_status
Get domain status
Read DNS for the project's custom hostname after configure_custom_domain. Returns dns.www, dns.apex, and dns.next (a single next DNS step, or null when www CNAME is in place and apex has records). customDomainStatus stays pending after attach — poll dns.next until null. Do not use this to attach a domain. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_file
Get file
Return metadata for one staged path (not file bytes). Use list_files to discover paths; use get_upload_url to replace content. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'path'], 'properties': {'path': {'type': 'string', 'description': 'Site-relative path (e.g. index.html or css/app.css). No leading slash required.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_preview_url
Get preview URL
Return the public site URL. On Pro/Scale this is the per-deploy https://{suffix}--{ref}.novence.ai alias (last 5 successful deploys stay). On Free it is the live https://{suffix}.novence.ai host. Use get_deployment_status to know if live yet; use configure_custom_domain for a custom hostname. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_project
Get project
Return one hosting project (name, suffix, settings, membership). Use list_projects to discover IDs. Use get_preview_url for the public URL (alias on Pro/Scale), and get_project_usage for quotas on that site. Read-only; does not mutate.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_project_analytics
Get project analytics
Cookieless edge analytics for a hosted site: pageviews, 404s, top pages, referrers, and countries. Off by default. Enable with update_project_settings analytics_enabled=true. Default last 7 days (max 90). If disabled, returns enabled=false and empty totals.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'to': {'type': 'string', 'description': 'Inclusive end date (ISO). Optional; default today. Range max 90 days.'}, 'from': {'type': 'string', 'description': 'Inclusive start date (ISO). Optional; default 7 days ago.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_project_usage
Get project usage
Per-project usage (storage, deploys, check minutes, bandwidth, forms). Bandwidth is live from edge-served bytes. Use get_quotas_and_usage for account totals; use get_project_analytics for pageviews. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_quotas_and_usage
Get quotas and usage
Account-level plan limits and current consumption (projects, storage, deploys, bandwidth). Use get_project_usage for one site; use get_account for profile plus quotas together. Read-only snapshot, not a live meter stream.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {}}
get_site_brief
Get site brief
Private webmaster brief for this project (Pro/Scale). Markdown or JSON, max 64 KB. Not on the live origin. On session start call this then list_site_events. Empty is brief: null. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
get_upload_url
Get upload URL
Get a presigned PUT URL for one site file. content_type is optional (inferred from extension). Use get_upload_urls_batch for multi-file sites, then confirm_upload after the PUT.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'path'], 'properties': {'path': {'type': 'string', 'description': 'Site-relative path (e.g. index.html or css/app.css). No leading slash required.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file. Optional; inferred from the path extension when omitted.'}}, 'additionalProperties': False}
get_upload_urls_batch
Get upload URLs (batch)
Presign many site files at once (max 100). Prefer this over get_upload_url for multi-file sites. After PUTs, call confirm_uploads_batch, not confirm_upload.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'files'], 'properties': {'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Site-relative path (e.g. index.html or css/app.css). No leading slash required.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file. Optional; inferred from the path extension when omitted.'}}, 'additionalProperties': False}, 'description': 'Files to presign, max 100. Each needs a site-relative path.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
invite_project_member
Invite project member
Invite a collaborator by email. Requires Pro/Scale on the project owner. Only the owner can invite as admin. Creates a new project on the caller's account if you use create_project instead — pass project_id here. Do not share the owner's nv_ key.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'email'], 'properties': {'role': {'enum': ['viewer', 'editor', 'admin'], 'type': 'string', 'default': 'editor', 'description': 'Access level. Default editor. Only the owner can grant admin.'}, 'email': {'type': 'string', 'format': 'email', 'description': "Invitee's email. They accept with accept_project_invite."}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
leave_project
Leave project
Leave a project you were invited to. Owners cannot leave — transfer or stay. Revokes your project keys. Use remove_project_member if you are the owner removing someone else.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
list_files
List files
List staged site files for a project (paths, types, sizes). Use get_file for one path's metadata; use delete_file to remove a path. Read-only; does not deploy.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
list_forms
List forms
List Novence forms on a project (ids, slugs, status). Use update_form to change one; use list_form_submissions to read leads. Not for third-party widgets. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
list_form_submissions
List form submissions
List visitor submissions for one Novence form (paginated). Use delete_form_submission to remove PII. Not for update_form schema changes. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'form_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size, 1â\x80\x93100. Optional.'}, 'offset': {'type': 'integer', 'minimum': 0, 'description': 'Number of submissions to skip. Optional; default 0.'}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'Form UUID from create_form or list_forms.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
list_project_members
List project members
List members and pending invites for a project. Use invite_project_member to add; use revoke_project_invite for pending tokens; use remove_project_member for accepted collaborators. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
list_projects
List projects
List hosting projects the caller owns or is invited to (ids, names, suffixes). Use get_project for one project's settings; use get_preview_url for the public URL (per-deploy alias on Pro/Scale, live host on Free). Read-only; does not create a project.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {}}
list_site_events
List site events
Webmaster inbox (Pro/Scale): form.submitted, collection.updated (agent vs owner_edit), check.completed, deploy.live. Default last 7 days, max 100. Pass since from the last session. Forms still email the owner. Read-only.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'limit': {'type': 'integer', 'description': 'Max rows (1â\x80\x93100). Optional; default 50.'}, 'since': {'type': 'string', 'description': 'ISO timestamp; only events after this. Optional; default 7 days ago.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
mpp_upgrade
MPP upgrade
Start or complete Pro/Scale via Machine Payments Protocol. Requires nv_ + verified email. First call returns a 402 Payment challenge; retry with payment_authorization (Payment credential) or _meta org.paymentauth/credential. Use after a 2nd project or a 402 — never after the first live URL.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'plan': {'enum': ['pro', 'scale'], 'type': 'string', 'default': 'pro', 'description': 'Paid plan to start. Defaults to pro.'}, 'payment_authorization': {'type': 'string', 'description': 'Payment credential from settling the 402 challenge. Omit on the first call.'}}, 'additionalProperties': False}
publish_html
Publish HTML
Publish one HTML document (report, dashboard, Claude-style artifact) as index.html and deploy. Omit project_id to create a project. Hosted MCP cannot read local files — pass the HTML string (read the file first). Returns url, project_id, and deployment. Poll get_deployment_status until live or failed. For multi-file sites use the upload + deploy loop instead. Re-call with the same project_id to replace the live page.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['html'], 'properties': {'html': {'type': 'string', 'description': 'Full HTML document to publish as /index.html. If you have a local file, read it and pass the contents here.'}, 'force': {'type': 'boolean', 'description': 'If true, publish even when quality checks would block. Optional; default false.'}, 'title': {'type': 'string', 'description': 'Project display name when creating a project. Optional; defaults to artifact.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
put_site_brief
Put site brief
Write the private webmaster brief (Pro/Scale, max 64 KB). What the site is, which /data files matter, form ids, owner email, what not to touch. Empty string clears it. Survives deploys.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'brief'], 'properties': {'brief': {'type': 'string', 'description': 'Markdown or JSON. Empty string clears the brief.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
put_site_data
Put live site JSON
Write /data/{name}.json on the live site without a deploy (Pro/Scale). Page JS keeps fetch("/data/{name}.json"). JSON must be an object or array, max 256 KB. Include the file in the next deploy or a repo upload that omits it can wipe it. Do not store secrets — the URL is public. Free: upload the JSON and call deploy instead.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'name', 'json'], 'properties': {'json': {'anyOf': [{'type': 'string'}, {'type': 'object', 'additionalProperties': {}}, {'type': 'array', 'items': {}}], 'description': 'JSON object/array, or a JSON string of the same.'}, 'name': {'type': 'string', 'description': 'Collection name only (e.g. menu). Becomes /data/menu.json. Letters, digits, _ or -.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
reissue_key
Reissue API key
Mint a new account nv_ key from email OTP. No Bearer key required. WARNING: revokes prior account-scoped nv_ keys. Also verifies email if needed.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email', 'code'], 'properties': {'code': {'type': 'string', 'description': 'OTP from resend_verification or the latest verification email.'}, 'email': {'type': 'string', 'format': 'email', 'description': 'Account email that owns the key.'}}, 'additionalProperties': False}
remove_project_member
Remove project member
Remove an accepted collaborator and revoke their project API keys. Owner-only for admins. For a pending invite, use revoke_project_invite instead. Irreversible; they must be invited again.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'account_id'], 'properties': {'account_id': {'type': 'string', 'format': 'uuid', 'description': 'Collaborator account UUID from list_project_members.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
resend_verification
Resend verification
Email a new OTP (also used for reissue_key). No Bearer key required. Works when already verified.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'email': {'type': 'string', 'format': 'email', 'description': 'Account email to receive a new OTP.'}}, 'additionalProperties': False}
revoke_project_invite
Revoke project invite
Cancel a pending invite so the token no longer works. Does not remove someone who already accepted — use remove_project_member for that. Irreversible for that invite_id; send a new invite_project_member if needed.
Destructive
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'invite_id'], 'properties': {'invite_id': {'type': 'string', 'format': 'uuid', 'description': 'Pending invite UUID from list_project_members.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
rollback
Rollback live site
Re-promote a previous successful snapshot to https://{suffix}.novence.ai without a new upload. Pro/Scale only (HTTP 402 on Free). Omit deployment_id to restore the previous live deploy. Only the last 5 successful deploys are retained. HTML Cache-Control is 60s — hard-refresh or wait. Does not run Lighthouse or increment deploys_count.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'deployment_id': {'type': 'string', 'format': 'uuid', 'description': "Specific deployment UUID. Omit to use the project's latest deployment."}}, 'additionalProperties': False}
run_checks
Run quality checks
Start a Lighthouse, a11y, and link check cycle on the latest deployment. Does not publish a new deploy — use deploy for that. Then poll get_checks_results (not get_deployment_status) until scores appear. Unverified accounts skip checks on deploy; this still queues a cycle when allowed.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
set_redirects
Set redirects
Write /_redirects (Netlify subset) into staging. Call deploy afterwards to publish. SPA History routing: /* /index.html 200. Exact files always win. Optional custom 404 is a separate /404.html upload. Does not write the live prefix.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Contents of /_redirects. Example: /*    /index.html   200'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
update_form
Update form
Patch an existing Novence form (name, slug, fields, notify_email, honeypot, active|disabled). Partial update: omitted fields stay unchanged. Use create_form for a new form; use list_forms to get form_id. Does not delete submissions.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'form_id'], 'properties': {'name': {'type': 'string', 'description': 'New display name. Omit to leave unchanged.'}, 'slug': {'type': 'string', 'description': 'New URL slug. Omit to leave unchanged.'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'HTML field name submitted with the form.'}, 'type': {'enum': ['text', 'email', 'tel', 'url', 'textarea', 'number', 'select', 'checkbox', 'hidden'], 'type': 'string', 'description': 'Input type rendered in the hosted form.'}, 'label': {'type': 'string', 'description': 'Visible label. Defaults to name if omitted.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Choices for type=select.'}, 'required': {'type': 'boolean', 'description': 'Whether the visitor must fill this field.'}}, 'additionalProperties': False}, 'description': 'Replacement field list when provided. Omit to leave the current schema unchanged.'}, 'status': {'enum': ['active', 'disabled'], 'type': 'string', 'description': 'active accepts submissions; disabled rejects them. Omit to leave unchanged.'}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'Form UUID from create_form or list_forms.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'notify_email': {'anyOf': [{'anyOf': [{'not': {}}, {'type': 'string', 'format': 'email'}]}, {'type': 'null'}], 'description': 'Notification inbox. Pass null to clear. Omit to leave unchanged.'}, 'honeypot_field': {'type': 'string', 'description': 'Spam honeypot field name. Omit to leave unchanged.'}}, 'additionalProperties': False}
update_project_member
Update project member role
Change a collaborator's role. Only the owner can grant or demote admin. Use remove_project_member to revoke access entirely. Does not affect pending invites — use revoke_project_invite for those.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id', 'account_id', 'role'], 'properties': {'role': {'enum': ['viewer', 'editor', 'admin'], 'type': 'string', 'description': 'New role. Only the owner can set admin.'}, 'account_id': {'type': 'string', 'format': 'uuid', 'description': 'Collaborator account UUID from list_project_members.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}}, 'additionalProperties': False}
update_project_settings
Update project settings
Update project name, description, check thresholds, analyticsEnabled (cookieless edge traffic; off by default), shareGateEmails (optional OTP gate on platform hosts only; empty = public), siteMcp (off | read | forms visitor MCP on Pro/Scale), or owner-edit (data_edit_emails + data_edit_names, optional data_edit_path; Pro/Scale, off by default).
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['project_id'], 'properties': {'name': {'type': 'string', 'description': 'New display name. Omit to leave unchanged.'}, 'site_mcp': {'enum': ['off', 'read', 'forms'], 'type': 'string', 'description': 'Visitor Site MCP. off (default), read (list_pages + get_site_data), or forms (also list_forms + submit_form). Pro/Scale. Cannot enable while share_gate_emails is set. Control plane stays /mcp with nv_.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Hosting project UUID from create_project or list_projects.'}, 'description': {'type': 'string', 'description': 'New internal notes. Omit to leave unchanged.'}, 'data_edit_path': {'type': 'string', 'description': 'Single path segment for the editor (default edit â\x86\x92 /edit). Letters, digits, hyphen.'}, 'data_edit_names': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': '1â\x80\x935 collection names the owner may edit (e.g. menu, hours). Required when data_edit_emails is set.'}, 'check_thresholds': {'type': 'object', 'description': 'Quality-check threshold overrides. Omit to leave unchanged.', 'additionalProperties': {}}, 'data_edit_emails': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'Up to 5 owner emails for live /edit (OTP). Empty turns owner-edit off. Pro/Scale. Custom domains included. Requires data_edit_names.'}, 'analytics_enabled': {'type': 'boolean', 'description': 'Enable cookieless edge analytics. Required true before get_project_analytics returns totals.'}, 'share_gate_emails': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'description': 'Up to 5 client emails. Non-empty turns on email OTP on *.novence.ai and /p/{suffix}/ only. Custom domains stay public. Empty array turns the gate off. Saving the list does not send mail.'}}, 'additionalProperties': False}
verify_email
Verify email
Confirm the email OTP (15 min TTL). No Bearer key required. Call after the first live URL, before checkout/mpp_upgrade.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email', 'code'], 'properties': {'code': {'type': 'string', 'description': 'One-time code from the verification email (about 15 minutes TTL).'}, 'email': {'type': 'string', 'format': 'email', 'description': 'Same email used with bootstrap.'}}, 'additionalProperties': False}
Added
list_site_events
Sept. 23, 2026, 2:51 a.m.
Added
put_site_brief
Sept. 23, 2026, 2:51 a.m.
Added
get_site_brief
Sept. 23, 2026, 2:51 a.m.
Changed
update_project_settings
Sept. 23, 2026, 2:51 a.m.
Changed
update_project_settings
Sept. 19, 2026, 2:49 a.m.
Added
accept_project_invite
Sept. 17, 2026, 7:57 a.m.
Added
leave_project
Sept. 17, 2026, 7:57 a.m.
Added
revoke_project_invite
Sept. 17, 2026, 7:57 a.m.
Added
remove_project_member
Sept. 17, 2026, 7:57 a.m.
Added
update_project_member
Sept. 17, 2026, 7:57 a.m.
Added
list_project_members
Sept. 17, 2026, 7:57 a.m.
Added
invite_project_member
Sept. 17, 2026, 7:57 a.m.
Added
get_account_console_kit
Sept. 17, 2026, 7:57 a.m.
Added
create_account_session
Sept. 17, 2026, 7:57 a.m.
Added
get_account
Sept. 17, 2026, 7:57 a.m.
Added
get_project_analytics
Sept. 17, 2026, 7:57 a.m.
Added
get_project_usage
Sept. 17, 2026, 7:57 a.m.
Added
get_quotas_and_usage
Sept. 17, 2026, 7:57 a.m.
Added
delete_form_submission
Sept. 17, 2026, 7:57 a.m.
Added
list_form_submissions
Sept. 17, 2026, 7:57 a.m.
Added
update_form
Sept. 17, 2026, 7:57 a.m.
Added
list_forms
Sept. 17, 2026, 7:57 a.m.
Added
create_form
Sept. 17, 2026, 7:57 a.m.
Added
get_domain_status
Sept. 17, 2026, 7:57 a.m.
Added
configure_custom_domain
Sept. 17, 2026, 7:57 a.m.
Added
get_checks_results
Sept. 17, 2026, 7:57 a.m.
Added
run_checks
Sept. 17, 2026, 7:57 a.m.
Added
rollback
Sept. 17, 2026, 7:57 a.m.
Added
get_preview_url
Sept. 17, 2026, 7:57 a.m.
Added
get_deployment_status
Sept. 17, 2026, 7:57 a.m.