Skip to main content
Glama

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.

Ownership verified
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

A4.1/5.0

Scored across 16 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness3/5

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
Vendor relationship
First-party
Restrictions
Not applicable

Available Tools

16 tools
check_fileCheck fileA
Read-only
Inspect

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 runA
Read-only
Inspect

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 designA
Destructive
Inspect

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 balanceA
Read-only
Inspect

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 formatsA
Read-only
Inspect

List supported NexDoc Design format slugs with selection guidance.

Inputs: no named parameters. Returns: formats

list_runsList runsA
Read-only
Inspect

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 emailA
Destructive
Inspect

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 designA
Destructive
Inspect

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 designA
Destructive
Inspect

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 designA
Destructive
Inspect

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 runA
Read-only
Inspect

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

    Related MCP Servers

    • A
      license
      C
      quality
      B
      maintenance
      Enables 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.
      53
      119 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Make 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,113
      MIT
    • F
      license
      Not graded
      quality
      B
      maintenance
      Enables 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.
      -
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources