resources/list,
tools/list, and prompts/list, so a curious model can rediscover all of
this at runtime.
Resources
Resources are read-only context. The AI fetches them once per session — they don’t take parameters and they don’t have side effects.brand://current
The single source of truth for your project’s brand. The first thing the AI
should read in any UI generation session.
GET /v1/brand. Refresh in a long
session by re-reading the resource.
schema://blog-post
JSON Schema for Post and PostTranslation. The AI reads it before
generating a /blog page so the rendered markup matches what the API returns.
schema://product
JSON Schema for Product and ProductVariant. Drives storefront page
generation and product-card components.
schema://booking
JSON Schema for BookableService, BookingAvailability, and Booking.
Drives booking flow generation.
conventions://editable-html
The most important resource. A short markdown doc describing the markup rules
the AI must follow to make generated sections editable in the project’s
admin.
conventions://api-usage
REST patterns: how auth headers work, error envelope shape, the async-job
contract, idempotency. The AI uses this when generating server-side code that
calls Neural Draft.
Tools
Tools have side effects. Each one wraps a real call to the v1 Project API.register_component
The AI calls this for every section it generates. The component appears in
your admin as editable, with data-translate keys discovered automatically.
| Param | Type | Required |
|---|---|---|
html | string — full section markup with data-translate / data-image-key attrs | Yes |
intent | string — short description of the section’s purpose | Yes |
section_type | enum: hero, features, pricing, cta, footer, testimonials, gallery, other | No |
POST /v1/components/register.
create_translation_keys
Bulk-create translation key namespaces. Useful when the AI is about to emit a
component with many keys and wants to seed each with default per-language
values.
generate_blog_post
Kick off the full blog generation pipeline. Returns a job id; poll or stream.
generate_image
Brand-consistent image generation. Returns a job id; poll for the URL.
connect_social_account
Returns the OAuth URL the AI surfaces to the user. They click, authorize,
return; the AI can then call social_post.publish.
list_products / get_product
Reads. The AI uses these when generating a product-grid or product-detail
page so the rendered fields match real data.
setup_booking_widget
Returns the embed snippet for a service. The AI inserts it into the page.
create_bookable_service
Create a service customers can book. Two modes — both share the same tool;
pick booking_type to switch:
time_slot(default) — meeting / appointment style withduration_minutes,buffer_before_minutes,buffer_after_minutes,max_bookings_per_slot.date_range— apartment / rental style withmin_nights,max_nights.
setup_booking_widget with the returned service_id.
Pages — create_page / list_pages / get_page / update_page
Multi-page authoring with per-page SEO meta. Call create_page once per
page before registering its components if you want a real
meta_title / meta_description. If you skip it, register_component
auto-creates a stub page that you can backfill via update_page.
update_page uses merge semantics — only the fields you pass are
overwritten, the rest are preserved. Pass null to clear a meta field.
Galleries — list_galleries / get_gallery / create_gallery / update_gallery / delete_gallery
Named, ordered image collections. One slug per gallery, an items array
of {url, alt} (max 200). Slugs auto-derive from name on create with
-2/-3/… suffixed on collision. items updates are full-replace —
read with get_gallery, mutate the array, send the complete new list back.
delete_gallery removes the gallery record only — underlying image URLs
stay in the images registry / media library.
Destructive deletes — delete_content / delete_page / delete_component / delete_image
Fill the gap on the destructive side of the catalog. All four take the
identifier and return 204. No undo.
| Tool | Identifier | Notes |
|---|---|---|
delete_content | key (string) | Removes every locale’s value for the key. |
delete_page | id (number) | Soft-retires by default (is_active=false). force: true for a hard delete. Refuses on the homepage. |
delete_component | id (number) | Hard delete; the HTML chunk is gone. Re-register via register_component. |
delete_image | key (string) | Removes the key→URL binding only. CDN bytes are untouched. |
generate_video
Short-form clip generation. Returns a Job; poll get_job until complete.
Two tiers — pick budget (default, Wan 2.1) for 40 credits or
premium (Kling v2.1 / Runway Gen4) for 300 credits. Premium requires a
Build plan or higher; Free / Hobby calling with tier=premium get
402 plan_required.
get_brand / update_brand
Read or patch the project’s brand context as a tool, for clients that don’t
list MCP resources. get_brand is identical to the brand://current
resource — read-only, free. update_brand accepts a partial patch (pass
null on a field to clear it) and writes through PATCH /v1/brand.
get_content / list_content
Lookups for translation keys. get_content(key, lang?) returns one value plus
the full all_locales map; list_content({ scope?, lang?, page_size? })
paginates the project’s keys. Read-only, free.
get_usage
Read the project’s current credit balance and per-operation breakdown for
the active billing period. Wraps GET /v1/projects/me/usage. Read-only,
free.
list_blog_posts
Paginated read of the project’s posts. Filter by status, lang,
category, tag, plus sort (created_at, published_at, descending
with -). Read-only, free.
find_workspaces
Look up the Neural Draft workspaces (tenants) registered against an email
address. Hits the central host (e.g. https://app.neuraldraft.io),
not the per-tenant API, and does NOT require an API key. Always returns
200 (empty list for unknown emails — defeats enumeration). Free.
list_newsletter_subscribers / list_contact_form_submissions
Read-only listings of the project’s captured leads. Both support page,
page_size (max 200) and search (substring match against email + subject
- message). The newsletter listing also accepts an
app_leadboolean to filter trial leads from real subscribers.
POST /v1/newsletters/subscribe, POST /v1/contact-forms). Form-submit
topics are not currently in the outgoing-webhook event whitelist — poll
these list endpoints (or the matching v1 admin endpoints) to inspect what
came in. These tools are read-only.
Prompts (slash commands)
Prompts are user-invoked. They expand into a long instruction the AI then executes — like a parameterised macro./scaffold-marketing-site
Generates a full Lovable/Next.js/Astro/Nuxt marketing site whose content lives
in Neural Draft.
| Argument | Notes |
|---|---|
framework | next | astro | sveltekit | nuxt |
pages | Comma-separated, e.g. home,about,pricing,contact |
- Read
brand://currentand apply colors/fonts/voice. - Read
conventions://editable-htmland follow the markup rules. - Read
schema://blog-postif generating a/blogroute. - Generate the requested pages.
- For every section, call
register_componentso the customer admin shows them as editable. - Use
@neuraldraft/sdkfor runtime fetches; print theeditor_urlfor each section.
/scaffold-blog-page
Drops a blog index + dynamic post page into the current project. Reads
schema://blog-post and renders an SSG-friendly page that fetches via the
v1 API.
/connect-existing-site
For static sites that already exist. Replaces hardcoded text with
{{ __('key') }}-style fetches and adds data-translate attributes so the
admin editor works.
/add-booking-widget
Single-flow embed: AI calls list_services, asks the user to pick one, calls
setup_booking_widget, then drops the snippet into the right place in the
page.
Annotations
Each tool advertises MCP annotations so smart clients can surface confirm-prompts before destructive ops:| Tool | readOnly | destructive | idempotent |
|---|---|---|---|
register_component | |||
create_translation_keys | ✓ | ||
generate_blog_post | |||
generate_image | |||
connect_social_account | ✓ | ✓ | |
list_products | ✓ | ✓ | |
get_product | ✓ | ✓ | |
setup_booking_widget | ✓ | ✓ | |
list_galleries | ✓ | ✓ | |
get_gallery | ✓ | ✓ | |
create_gallery | |||
update_gallery | ✓ | ||
delete_gallery | ✓ | ✓ | |
delete_content | ✓ | ✓ | |
delete_page | ✓ | ✓ | |
delete_component | ✓ | ✓ | |
delete_image | ✓ | ✓ |
Observability
Every tool call is logged in your project’s audit log under the synthetic agentmcp:<machine-name>. The dashboard’s “MCP usage” pane shows the most
common tool/resource calls and tail latency, so you can spot a misbehaving
session.
Source
The MCP server ships as the@neuraldraft/mcp
npm package; source lives at
github.com/vbalagovic/neuraldraft-mcp.
File issues there. We follow SemVer; non-breaking additions are normal.