NexDoc Design
Server Details
Give your AI agents a design superpower. Generate, edit, and publish publication-grade decks, reports, landing pages, resumes, and marketing visuals directly within your agent workflow. Delivering frontier-level design quality at 3× the speed and 53× lower cost -from conversational prompt to live link or vector PDF in minutes.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 16 tools
Most tools target clearly distinct actions (create vs update vs export vs publish vs check_run vs wait_for_run). The main friction is the upload cluster — request_file_upload, upload_data, and upload_file all produce a file_id, and while the descriptions explain which transport to use, an agent must read carefully to pick the right one. check_file vs check_run and refresh_preview vs check_run are also close but adequately distinguished.
Every tool follows a consistent verb_noun snake_case convention (create_design, update_design, export_design, publish_design, unpublish_design, check_file, check_run, list_runs, list_formats, get_balance, wait_for_run, refresh_preview, request_file_upload, upload_data, upload_file, notify_run_email). No mixed casing or stray verb styles.
Sixteen tools is on the higher side of comfortable but each maps to a real step in the design lifecycle (upload, create, poll, update, export, publish). The three-way upload split is the only place where the count feels inflated, justified by stdio vs remote transport constraints.
Core flow is covered: upload, create, poll, update, export, publish/unpublish, balance, formats, email notify. However, multiple descriptions explicitly reference cancelling a run ('ask the user before cancelling or re-running') yet no cancel_run tool exists, and there is no delete_design, get_job, or list_jobs — leaving dead ends for cancel and job discovery workflows.
Publisher details
- Operator
- NexDoc AI Inc. · Publisher source
- Operator website
- https://www.nexdoc.design
- Vendor relationship
- First-party
- Documentation
- https://www.nexdoc.design/docs
- Trust center
- https://www.nexdoc.ai/trust
- Restrictions
- Not applicable
Available Tools
16 toolscheck_fileCheck fileARead-onlyInspect
Get upload status for a file_id from request_file_upload or upload_file. When status is ready, pass file_ids to create_design or update_design — use the file_id from this response (canonical after content dedup). If pending_upload, PUT to the original upload_url first.
Inputs: file_id (required). Returns: uri, status, file_id, filename, +4 more
check_runCheck runARead-onlyInspect
Fetch current status for a run (status, charge_usd, viewer_url, error). Pass THIS run's run_id after update_design — do not look up the previous run. viewer_url is only present when status is completed and includes ?run= for this generation. Never reuse a viewer_url from an earlier run. If concurrency_notice is present, show it to the user.
Inputs: job_id (required), run_id (required). Returns: error, job_id, run_id, status, +12 more
create_designCreate designADestructiveInspect
Create a job (or reuse job_id) and start a generative run. Omitting job_id ALWAYS creates a NEW job — call at most ONCE per user request. If you already have a job_id (including from a prior create_design error), pass it or use update_design; never call create_design again without job_id for the same request. The API rejects a second run on a job while one is still queued or running (409) — if a run fails or stalls, report it and ask the user before cancelling or re-running. Always tell the user job_id and run_id as soon as this returns. If the result includes concurrency_notice, show that reminder (pay-as-you-go accounts run one design at a time). Do not set wait:true. If the user asked to be emailed (including in the original request), set notify_email:true here immediately — do not wait until after wait_for_run. After create, call wait_for_run ONCE (default ~45s). If still_running and they have not already asked for email, stop polling, show the IDs, and offer notify_run_email. Photos/logos: prefer request_file_upload (or upload_file on stdio) then pass file_ids — never compress or generate a replacement. asset_paths is stdio-only; asset_files base64 is a last resort for tiny files. After completion, return viewer_url and offer export (pdf/html/png) — do not publish unless the user asks.
Inputs: format (required), instructions (required), name, wait, +8 more. Returns: error, job_id, run_id, status, +12 more
export_designExport designAInspect
Export a job as pdf, html (ZIP of the site), png (ZIP of PNG pages/slides/artboards), or pptx (editable PowerPoint, slide decks only) and return a short-lived download_url. Prefer pdf for print/slides/cards; html for web landing pages; png when the user wants images; pptx when the user wants to edit a slide deck in PowerPoint. pptx returns 400 for anything that is not a Reveal deck. This is the standard download step — do not publish unless the user asks.
Inputs: format (required), job_id (required), run_id. Returns: format, run_id, expires_at, commit_hash, +1 more
get_balanceGet balanceARead-onlyInspect
Get the authenticated org wallet summary (USD balances, plan, concurrent_run_limit, auto-topup, past_due).
Inputs: no named parameters. Returns: plan, past_due, balance_usd, concurrent_run_limit
list_formatsList formatsARead-onlyInspect
List supported NexDoc Design format slugs with selection guidance.
Inputs: no named parameters. Returns: formats
list_runsList runsARead-onlyInspect
List runs for a job (oldest first; the last entry is the latest run).
Inputs: job_id (required). Returns: data, job_id
notify_run_emailNotify by emailADestructiveInspect
Email the authenticated account when this run finishes (completed, failed, or cancelled). Call whenever the user asks to be emailed — including after wait_for_run, and even if the run has already finished. If the run is already terminal and no email was sent yet, this sends now. If already sent, it reports that and does not send a duplicate.
Inputs: job_id (required), run_id (required). Returns: email, notified, already_sent
publish_designPublish designADestructiveInspect
Publish a job to a public URL. ONLY call this when the user explicitly asks to publish or make the design public — never as a default step after create/export.
Inputs: job_id (required), run_id. Returns: published, public_url
refresh_previewRefresh previewAInspect
Mint a fresh viewer_url for a job's current snapshot. After an in-progress update, this still shows the previous design. Prefer check_run on the new run_id and only share that viewer_url when status is completed. Use this when a completed preview link expired or 401s.
Inputs: job_id (required). Returns: expires_at, viewer_url
request_file_uploadRequest file uploadAInspect
Mint a presigned upload URL for a photo/logo/PDF. Preferred for anything larger than a small icon — do not base64 the file into asset_files and do not compress or generate a replacement. Pass content_sha256 (hex) when known to reuse an existing upload for this user. After this returns, if already_uploaded is true skip PUT and use file_id; otherwise PUT the ORIGINAL file bytes to upload_url (same Content-Type), then check_file until status is ready, then pass file_ids to create_design or update_design.
Inputs: filename (required), size_bytes (required), content_type (required), content_sha256. Returns: uri, file_id, next_step, expires_at, +2 more
unpublish_designUnpublish designADestructiveInspect
Unpublish a job's public site. Only when the user asks to take a published design down.
Inputs: job_id (required). Returns: public_url, unpublished
update_designUpdate designADestructiveInspect
Start an update run on an existing job with edit instructions (diff-style). NEVER start an update while a run on this job is still queued or running — the API rejects it with 409. If wait_for_run said still_running (or the user reports an issue mid-run), report status and WAIT until the run completes or fails before updating; only cancel or re-run if the user explicitly asks. Always tell the user job_id and the NEW run_id. Do not share the previous viewer_url — that preview is the old design. If the result includes concurrency_notice, show that reminder. Same wait policy as create_design: wait_for_run once on the new run_id, then offer email instead of looping. Only share viewer_url after THIS run's status is completed. New photos: request_file_upload (or upload_file on stdio) then file_ids. Do not base64 a large image. Do not generate a replacement.
Inputs: format (required), job_id (required), instructions (required), wait, +7 more. Returns: error, job_id, run_id, status, +12 more
upload_dataUpload file dataAInspect
Remote-safe upload for sandboxed MCP clients (Claude.ai, ChatGPT) whose egress allowlist blocks PUTs to the storage host: send the file bytes as base64 and they upload through the API itself — the same host the MCP session already uses. Returns a ready file_id for file_ids. Decode locally first: if a source image fails to decode or renders blank/transparent, the bytes are corrupt — tell the user instead of uploading. For logos/photos prefer this over asset_files on create_design/update_design when a presigned PUT is not possible. Not for files over ~20MB.
Inputs: filename (required), data_base64 (required), content_type. Returns: uri, status, file_id, filename, +4 more
upload_fileUpload local fileAInspect
stdio MCP only: read a local path, SHA-256 the bytes, upload to NexDoc (or reuse an existing file for this user when content matches), and return a ready file_id. Use this instead of asset_files for large photos. Then pass file_ids to create_design or update_design. Remote/OAuth MCP cannot read the client's disk — use request_file_upload (with optional content_sha256) and PUT instead.
Inputs: path (required). Returns: uri, status, file_id, filename, +4 more
wait_for_runWait for runARead-onlyInspect
Poll a run until completed, failed, cancelled, or the timeout (default 45 seconds, max 90). Call this at most ONCE after create_design or update_design, using that run's run_id. If still_running, do not share a previous viewer_url. If concurrency_notice is present, show it. If the result includes still_running: true, do not call this tool again unless the user explicitly asks to keep waiting — show job_id and the new run_id. Offer notify_run_email only if they have not already asked to be emailed.
Inputs: job_id (required), run_id (required), timeout_sec, interval_sec. Returns: error, job_id, run_id, status, +12 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Build decks in your own brand, from the AI agent you already use. Then edit them yourself.
Make videos and docs with your AI agent — describe what you need, every output stays editable.
Agent-Native design tool - create and edit visual designs with agent assistance
Your AI agent designs editable, clickable UI prototypes on a live canvas.
Related MCP Servers
- AlicenseCqualityBmaintenanceEnables AI agents to autonomously create and edit graphic designs, multi-page PDF catalogs, brochures, social media assets, and slide decks on a local browser canvas. It provides vision-in-the-loop feedback, layout audits, and export capabilities for print-ready or web-ready outputs.53119 npmMIT
- AlicenseNot gradedqualityBmaintenanceMake posters, social posts, slides and landing pages in the coding agent or chat you already use (Copilot, Claude, Codex, Cursor), with 198 design systems, checks and PDF/PNG/PowerPoint export.1,113MIT

Canvora MCPofficial
AlicenseAqualityCmaintenanceEnables AI agents to generate on-brand visuals from ideas, URLs, documents, or PDFs in over 100 formats and 150+ languages, with consistent brand kits.1627 npm1MIT- FlicenseNot gradedqualityBmaintenanceEnables AI agents to author presentations, reports, and one-pagers as visual documents that humans can edit in a WYSIWYG editor and export to a single HTML file.-
Glama MCP Gateway
Add one secure layer between your agents and this server.