Novence

Hosted MCP for creating, checking, deploying, and hosting static sites for AI agents.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
92%
이름 품질
95%
오염 위험
100%
권한 일치
70%
프로토콜 준수
100%

발견 사항 (3)

  • LOWTool 'get_upload_url' suggests web access but openWorldHint=falseget_upload_url에서
  • LOWTool 'get_upload_urls_batch' suggests web access but openWorldHint=falseget_upload_urls_batch에서
  • LOWTool 'get_preview_url' suggests web access but openWorldHint=falseget_preview_url에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~9,116토큰 (도구 정의)
~1.3 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 7.12%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "mcp": {
      "url": "https://api.novence.ai/mcp"
    }
  }
}

원격 엔드포인트

https://api.novence.ai/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (50)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟡bootstrap(email)

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.

입력 스키마

{
  "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(email, code)

Confirm the email OTP (15 min TTL). No Bearer key required. Call after the first live URL, before checkout/mpp_upgrade.

입력 스키마

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email",
      "description": "Same email used with bootstrap."
    },
    "code": {
      "type": "string",
      "description": "One-time code from the verification email (about 15 minutes TTL)."
    }
  },
  "required": [
    "email",
    "code"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪resend_verification(email)

Email a new OTP (also used for reissue_key). No Bearer key required. Works when already verified.

입력 스키마

{
  "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(email, code)

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.

입력 스키마

{
  "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(plan, success_url, cancel_url)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "enum": [
        "pro",
        "scale"
      ],
      "default": "pro",
      "description": "Paid plan to subscribe. Defaults to pro."
    },
    "success_url": {
      "type": "string",
      "format": "uri",
      "description": "Browser return URL after successful payment. Optional."
    },
    "cancel_url": {
      "type": "string",
      "format": "uri",
      "description": "Browser return URL if the customer cancels Checkout. Optional."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪mpp_upgrade(plan, payment_authorization)

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.

입력 스키마

{
  "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(return_url)

Stripe Customer Portal URL for an existing subscriber (manage/cancel). Not first-time subscribe — use checkout or mpp_upgrade for that.

입력 스키마

{
  "type": "object",
  "properties": {
    "return_url": {
      "type": "string",
      "format": "uri",
      "description": "Browser URL after leaving the Stripe portal. Optional."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_project(name, description)

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.

입력 스키마

{
  "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(html, title, project_id, force)

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.

입력 스키마

{
  "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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢get_project(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡update_project_settings(project_id, name, description, check_thresholds, analytics_enabled, ...)

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).

입력 스키마

{
  "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_."
    },
    "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."
    },
    "data_edit_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 5,
      "description": "1–5 collection names the owner may edit (e.g. menu, hours). Required when data_edit_emails is set."
    },
    "data_edit_path": {
      "type": "string",
      "description": "Single path segment for the editor (default edit → /edit). Letters, digits, hyphen."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡get_upload_url(project_id, path, content_type)

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.

입력 스키마

{
  "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(project_id, files)

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.

입력 스키마

{
  "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(project_id, path, content_type)

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.

입력 스키마

{
  "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(project_id, files)

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.

입력 스키마

{
  "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(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_file(project_id, path)

Return metadata for one staged path (not file bytes). Use list_files to discover paths; use get_upload_url to replace content. Read-only.

입력 스키마

{
  "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(project_id, path)

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.

입력 스키마

{
  "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(project_id, body)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    },
    "body": {
      "type": "string",
      "description": "Contents of /_redirects. Example: /*    /index.html   200"
    }
  },
  "required": [
    "project_id",
    "body"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴put_site_data(project_id, name, 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.

입력 스키마

{
  "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#"
}
🟢get_site_brief(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡put_site_brief(project_id, 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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    },
    "brief": {
      "type": "string",
      "description": "Markdown or JSON. Empty string clears the brief."
    }
  },
  "required": [
    "project_id",
    "brief"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_site_events(project_id, since, limit)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    },
    "since": {
      "type": "string",
      "description": "ISO timestamp; only events after this. Optional; default 7 days ago."
    },
    "limit": {
      "type": "integer",
      "description": "Max rows (1–100). Optional; default 50."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡deploy(project_id, force)

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.

입력 스키마

{
  "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(project_id, deployment_id)

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.

입력 스키마

{
  "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(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪rollback(project_id, deployment_id)

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.

입력 스키마

{
  "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(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_checks_results(project_id, deployment_id)

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.

입력 스키마

{
  "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(project_id, hostname, primary, redirect)

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).

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    },
    "hostname": {
      "type": "string",
      "description": "Custom hostname (e.g. example.com or www.example.com)."
    },
    "primary": {
      "type": "string",
      "enum": [
        "www",
        "apex"
      ],
      "description": "Which host is canonical. Default www."
    },
    "redirect": {
      "type": "boolean",
      "description": "If true, redirect the non-primary host to the primary. Default true."
    }
  },
  "required": [
    "project_id",
    "hostname"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_domain_status(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_form(project_id, name, slug, fields, notify_email, ...)

Create a Novence form on a project (optional — sites may use Formspree/Web3forms instead). Returns submit URLs for edge + public API.

입력 스키마

{
  "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(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_form(project_id, form_id, name, slug, fields, ...)

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.

입력 스키마

{
  "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(project_id, form_id, limit, offset)

List visitor submissions for one Novence form (paginated). Use delete_form_submission to remove PII. Not for update_form schema changes. Read-only.

입력 스키마

{
  "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."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Page size, 1–100. Optional."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of submissions to skip. Optional; default 0."
    }
  },
  "required": [
    "project_id",
    "form_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_form_submission(project_id, form_id, submission_id)

Permanently delete one form submission (PII). Does not disable the form — use update_form status=disabled. Irreversible.

입력 스키마

{
  "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."
    },
    "submission_id": {
      "type": "string",
      "format": "uuid",
      "description": "Submission UUID from list_form_submissions."
    }
  },
  "required": [
    "project_id",
    "form_id",
    "submission_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢get_project_usage(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_project_analytics(project_id, from, to)

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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡invite_project_member(project_id, email, role)

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.

입력 스키마

{
  "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(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_project_member(project_id, account_id, 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.

입력 스키마

{
  "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(project_id, account_id)

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.

입력 스키마

{
  "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."
    }
  },
  "required": [
    "project_id",
    "account_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴revoke_project_invite(project_id, invite_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    },
    "invite_id": {
      "type": "string",
      "format": "uuid",
      "description": "Pending invite UUID from list_project_members."
    }
  },
  "required": [
    "project_id",
    "invite_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴leave_project(project_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "description": "Hosting project UUID from create_project or list_projects."
    }
  },
  "required": [
    "project_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡accept_project_invite(token, otp)

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.

입력 스키마

{
  "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#"
}

권장 프롬프트

retrieve_data
Get details about [item] from Novence
예상 도구: get_project
fetch_info
Fetch [information type] using Novence
예상 도구: get_project
list_items
List all [items] available in Novence
예상 도구: list_projects
browse_collection
Show me the [collection] from Novence
예상 도구: list_projects
explore_workflow
List available [items], then get details for each one using Novence
예상 도구: list_projectsget_project

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 50개
검증됨버전이 기록되지 않음도구 50개