Hosted MCP for creating, checking, deploying, and hosting static sites for AI agents.
ai.novence/mcp โ Model Context Protocol (MCP) Server
ai.novence/mcp is a hosted Model Context Protocol server for Novence. It supports workflows to create, check, deploy, and host static sites for AI agents. The endpoint is https://api.novence.ai/mcp and it uses streamable HTTP.
๐ ๏ธ Key Features
Hosted MCP server for static site hosting for AI agents
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.
Parameters1
email
string
required
Account email. Receives the OTP after the first live URL.
Raw schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Account email. Receives the OTP after the first live URL."
}
},
"required": [
"email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
verify_email
Confirm the email OTP (15 min TTL). No Bearer key required. Call after the first live URL, before checkout/mpp_upgrade.
Parameters2
email
string
required
Same email used with bootstrap.
code
string
required
One-time code from the verification email (about 15 minutes TTL).
Email a new OTP (also used for reissue_key). No Bearer key required. Works when already verified.
Parameters1
email
string
required
Account email to receive a new OTP.
Raw schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Account email to receive a new OTP."
}
},
"required": [
"email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
reissue_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.
Parameters2
email
string
required
Account email that owns the key.
code
string
required
OTP from resend_verification or the latest verification email.
Raw schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Account email that owns the key."
},
"code": {
"type": "string",
"description": "OTP from resend_verification or the latest verification email."
}
},
"required": [
"email",
"code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters3
plan
string
optional
Paid plan to subscribe. Defaults to pro.
success_url
string
optional
Browser return URL after successful payment. Optional.
cancel_url
string
optional
Browser return URL if the customer cancels Checkout. Optional.
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.
Parameters2
plan
string
optional
Paid plan to start. Defaults to pro.
payment_authorization
string
optional
Payment credential from settling the 402 challenge. Omit on the first call.
Raw schema
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"pro",
"scale"
],
"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,
"$schema": "http://json-schema.org/draft-07/schema#"
}
billing_portal
Stripe Customer Portal URL for an existing subscriber (manage/cancel). Not first-time subscribe โ use checkout or mpp_upgrade for that.
Parameters1
return_url
string
optional
Browser URL after leaving the Stripe portal. Optional.
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.
Parameters2
name
string
required
Human-readable project name.
description
string
optional
Optional notes stored on the project. Not shown on the live site.
Raw schema
{
"type": "object",
"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."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters4
html
string
required
Full HTML document to publish as /index.html. If you have a local file, read it and pass the contents here.
title
string
optional
Project display name when creating a project. Optional; defaults to artifact.
project_id
string
optional
Hosting project UUID from create_project or list_projects.
force
boolean
optional
If true, publish even when quality checks would block. Optional; default false.
Raw schema
{
"type": "object",
"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."
},
"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."
},
"force": {
"type": "boolean",
"description": "If true, publish even when quality checks would block. Optional; default false."
}
},
"required": [
"html"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
Update project name, description, check thresholds, analyticsEnabled (cookieless edge traffic; off by default), shareGateEmails (optional OTP gate on platform hosts only; empty = public), or siteMcp (off | read | forms visitor MCP on Pro/Scale).
Parameters7
project_id
string
required
Hosting project UUID from create_project or list_projects.
name
string
optional
New display name. Omit to leave unchanged.
description
string
optional
New internal notes. Omit to leave unchanged.
check_thresholds
object
optional
Quality-check threshold overrides. Omit to leave unchanged.
analytics_enabled
boolean
optional
Enable cookieless edge analytics. Required true before get_project_analytics returns totals.
share_gate_emails
array
optional
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.
site_mcp
string
optional
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_.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"name": {
"type": "string",
"description": "New display name. Omit to leave unchanged."
},
"description": {
"type": "string",
"description": "New internal notes. Omit to leave unchanged."
},
"check_thresholds": {
"type": "object",
"additionalProperties": {},
"description": "Quality-check threshold overrides. Omit to leave unchanged."
},
"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."
},
"site_mcp": {
"type": "string",
"enum": [
"off",
"read",
"forms"
],
"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_."
}
},
"required": [
"project_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters3
project_id
string
required
Hosting project UUID from create_project or list_projects.
path
string
required
Site-relative path (e.g. index.html or css/app.css). No leading slash required.
content_type
string
optional
MIME type for the file. Optional; inferred from the path extension when omitted.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"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."
}
},
"required": [
"project_id",
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
files
array
required
Files to presign, max 100. Each needs a site-relative path.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"files": {
"type": "array",
"items": {
"type": "object",
"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."
}
},
"required": [
"path"
],
"additionalProperties": false
},
"description": "Files to presign, max 100. Each needs a site-relative path."
}
},
"required": [
"project_id",
"files"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters3
project_id
string
required
Hosting project UUID from create_project or list_projects.
path
string
required
Site-relative path (e.g. index.html or css/app.css). No leading slash required.
content_type
string
optional
MIME type for the file. Optional; inferred from the path extension when omitted.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"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."
}
},
"required": [
"project_id",
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
files
array
required
Same paths that were presigned and PUT.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"files": {
"type": "array",
"items": {
"type": "object",
"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."
}
},
"required": [
"path"
],
"additionalProperties": false
},
"description": "Same paths that were presigned and PUT."
}
},
"required": [
"project_id",
"files"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
Return metadata for one staged path (not file bytes). Use list_files to discover paths; use get_upload_url to replace content. Read-only.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
path
string
required
Site-relative path (e.g. index.html or css/app.css). No leading slash required.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"path": {
"type": "string",
"description": "Site-relative path (e.g. index.html or css/app.css). No leading slash required."
}
},
"required": [
"project_id",
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
path
string
required
Site-relative path (e.g. index.html or css/app.css). No leading slash required.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"path": {
"type": "string",
"description": "Site-relative path (e.g. index.html or css/app.css). No leading slash required."
}
},
"required": [
"project_id",
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
body
string
required
Contents of /_redirects. Example: /* /index.html 200
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.
Parameters3
project_id
string
required
Hosting project UUID from create_project or list_projects.
name
string
required
Collection name only (e.g. menu). Becomes /data/menu.json. Letters, digits, _ or -.
json
any
required
JSON object/array, or a JSON string of the same.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"name": {
"type": "string",
"description": "Collection name only (e.g. menu). Becomes /data/menu.json. Letters, digits, _ or -."
},
"json": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"additionalProperties": {}
},
{
"type": "array",
"items": {}
}
],
"description": "JSON object/array, or a JSON string of the same."
}
},
"required": [
"project_id",
"name",
"json"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
deploy
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
force
boolean
optional
If true, publish even when quality checks would block. Optional; default false.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"force": {
"type": "boolean",
"description": "If true, publish even when quality checks would block. Optional; default false."
}
},
"required": [
"project_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
deployment_id
string
optional
Specific deployment UUID. Omit to use the project's latest deployment.
Raw schema
{
"type": "object",
"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."
}
},
"required": [
"project_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
deployment_id
string
optional
Specific deployment UUID. Omit to use the project's latest deployment.
Raw schema
{
"type": "object",
"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."
}
},
"required": [
"project_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
run_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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
deployment_id
string
optional
Specific deployment UUID. Omit to use the project's latest deployment.
Raw schema
{
"type": "object",
"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."
}
},
"required": [
"project_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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).
Parameters4
project_id
string
required
Hosting project UUID from create_project or list_projects.
hostname
string
required
Custom hostname (e.g. example.com or www.example.com).
primary
string
optional
Which host is canonical. Default www.
redirect
boolean
optional
If true, redirect the non-primary host to the primary. Default true.
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
Create a Novence form on a project (optional โ sites may use Formspree/Web3forms instead). Returns submit URLs for edge + public API.
Parameters6
project_id
string
required
Hosting project UUID from create_project or list_projects.
name
string
required
Display name for the form in the account.
slug
string
optional
URL slug. Optional; generated from name if omitted.
fields
array
optional
Field definitions. Empty array allowed; add fields later with update_form.
notify_email
any
optional
Where to email new submissions. Optional.
honeypot_field
string
optional
Hidden field name used as a spam honeypot. Optional.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"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",
"properties": {
"name": {
"type": "string",
"description": "HTML field name submitted with the form."
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"url",
"textarea",
"number",
"select",
"checkbox",
"hidden"
],
"description": "Input type rendered in the hosted form."
},
"required": {
"type": "boolean",
"description": "Whether the visitor must fill this field."
},
"label": {
"type": "string",
"description": "Visible label. Defaults to name if omitted."
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"description": "Choices for type=select."
}
},
"required": [
"name",
"type"
],
"additionalProperties": false
},
"default": [],
"description": "Field definitions. Empty array allowed; add fields later with update_form."
},
"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."
}
},
"required": [
"project_id",
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters8
project_id
string
required
Hosting project UUID from create_project or list_projects.
form_id
string
required
Form UUID from create_form or list_forms.
name
string
optional
New display name. Omit to leave unchanged.
slug
string
optional
New URL slug. Omit to leave unchanged.
fields
array
optional
Replacement field list when provided. Omit to leave the current schema unchanged.
notify_email
any
optional
Notification inbox. Pass null to clear. Omit to leave unchanged.
honeypot_field
string
optional
Spam honeypot field name. Omit to leave unchanged.
status
string
optional
active accepts submissions; disabled rejects them. Omit to leave unchanged.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"form_id": {
"type": "string",
"format": "uuid",
"description": "Form UUID from create_form or list_forms."
},
"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",
"properties": {
"name": {
"type": "string",
"description": "HTML field name submitted with the form."
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"url",
"textarea",
"number",
"select",
"checkbox",
"hidden"
],
"description": "Input type rendered in the hosted form."
},
"required": {
"type": "boolean",
"description": "Whether the visitor must fill this field."
},
"label": {
"type": "string",
"description": "Visible label. Defaults to name if omitted."
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"description": "Choices for type=select."
}
},
"required": [
"name",
"type"
],
"additionalProperties": false
},
"description": "Replacement field list when provided. Omit to leave the current schema unchanged."
},
"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."
},
"status": {
"type": "string",
"enum": [
"active",
"disabled"
],
"description": "active accepts submissions; disabled rejects them. Omit to leave unchanged."
}
},
"required": [
"project_id",
"form_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters4
project_id
string
required
Hosting project UUID from create_project or list_projects.
form_id
string
required
Form UUID from create_form or list_forms.
limit
integer
optional
Page size, 1โ100. Optional.
offset
integer
optional
Number of submissions to skip. Optional; default 0.
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.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters3
project_id
string
required
Hosting project UUID from create_project or list_projects.
from
string
optional
Inclusive start date (ISO). Optional; default 7 days ago.
to
string
optional
Inclusive end date (ISO). Optional; default today. Range max 90 days.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"from": {
"type": "string",
"description": "Inclusive start date (ISO). Optional; default 7 days ago."
},
"to": {
"type": "string",
"description": "Inclusive end date (ISO). Optional; default today. Range max 90 days."
}
},
"required": [
"project_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
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.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
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.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
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.
Parameters3
project_id
string
required
Hosting project UUID from create_project or list_projects.
email
string
required
Invitee's email. They accept with accept_project_invite.
role
string
optional
Access level. Default editor. Only the owner can grant admin.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"email": {
"type": "string",
"format": "email",
"description": "Invitee's email. They accept with accept_project_invite."
},
"role": {
"type": "string",
"enum": [
"viewer",
"editor",
"admin"
],
"default": "editor",
"description": "Access level. Default editor. Only the owner can grant admin."
}
},
"required": [
"project_id",
"email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters3
project_id
string
required
Hosting project UUID from create_project or list_projects.
account_id
string
required
Collaborator account UUID from list_project_members.
role
string
required
New role. Only the owner can set admin.
Raw schema
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid",
"description": "Hosting project UUID from create_project or list_projects."
},
"account_id": {
"type": "string",
"format": "uuid",
"description": "Collaborator account UUID from list_project_members."
},
"role": {
"type": "string",
"enum": [
"viewer",
"editor",
"admin"
],
"description": "New role. Only the owner can set admin."
}
},
"required": [
"project_id",
"account_id",
"role"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
account_id
string
required
Collaborator account UUID from list_project_members.
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.
Parameters2
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters1
project_id
string
required
Hosting project UUID from create_project or list_projects.
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.
Parameters2
token
string
required
Invite token from the invitation email (or invite_project_member in local/dev).
otp
string
optional
Email OTP required when the invitee is not yet verified. Optional if already verified.
Raw schema
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Invite token from the invitation email (or invite_project_member in local/dev)."
},
"otp": {
"type": "string",
"description": "Email OTP required when the invitee is not yet verified. Optional if already verified."
}
},
"required": [
"token"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
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.
Install (Claude Code)
bash
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.