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. If the human message includes a Signup attribution object, pass it as attribution unchanged.
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.
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.
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 faile
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 JSO
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.
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.
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.
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.
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.
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-o
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 Li
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.
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.
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
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 d
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
FAQ
Questions
How do I install Novence?
Copy the http config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does Novence need an API key?
No required environment variable is listed on this record.
What transport does Novence use?
Novence is reached over HTTP.
When was Novence last checked?
Last checked 2026-10-19. Hosted MCP for creating, checking, deploying, and hosting static sites for AI agents.
This repository is the Claude Code plugin / install package (Novence-ai/mcp). The MCP server itself is hosted; there is nothing to run locally.
The Dockerfile and catalog/ stdio adapter are only for MCP directories (Glama). They answer tools/list with public tool schemas. They do not contain the hosting API. End users should use https://api.novence.ai/mcp.
Root .mcp.json (and mcp.json for Cursor / Agent Plugins) is Cursor-safe: URL only, no Claude ${user_config.*} placeholders. After bootstrap, Cursor / shell clients persist auth with env NOVENCE_API_KEY and a Bearer header. The Claude Code plugin keeps Keychain / userConfig.api_key via .claude-plugin/plugin.json inline mcpServers.
Skill for registries: skills/novence-deploy (gh skill install Novence-ai/mcp novence-deploy when available).
Install (Claude Code)
claude plugin marketplace add Novence-ai/mcp
# or: enable from the Claude plugin directory after listing is approved
Leave Novence API key blank. Call bootstrap(email) (MCP). After the live URL, paste the nv_ key in plugin settings (Keychain) and run /reload-plugins so later sessions stay authenticated.
Claude stores the key via plugin userConfig. Empty interpolation is treated as unauthenticated (Bearer / uninterpolated ${user_config.api_key}), so bootstrap works before you fill the field.
Cursor / shell
Root .mcp.json matches this URL-only shape (no auth header). Connect with no header, then bootstrap: