MCP App Store
by KeenEthics
Scopture icon

Scopture

By Jorge Soares

Get New App Alerts

Overview

Work directly with connected design and projects in Scopture. Inspect models, drawings, canvas state, and .duc files while keeping the surrounding project context in view. Analyze project data, run Python, capture screenshots, manage issues and project charters, trace requirements and decisions, and apply changes directly to the work.

Tools

add_constraints

ChatGPT
Append one or more constraints to the drawing charter. New constraints are added after the existing list in the order provided.

add_decisions

ChatGPT
Append one or more decisions to the drawing charter. Use issueIds when the decision should retain explicit links back to relevant issues.

add_requirements

ChatGPT
Append one or more requirements to the drawing charter. New requirements are added after the existing list in the order provided.

check_python_run_job

ChatGPT
Checks an existing Python sandbox job by jobId without re-running code. Use this for jobs returned by run_python_code, run_sqlite, search_text, and other Python-backed MCP tools. Use waitForCompletionMs=0 for an immediate status check, or wait incrementally (for example 5000, 10000, 30000) to wait for slow jobs. If the job produced a drawing update, this call finalizes it exactly once.

create_drawing

ChatGPT
Creates a new remote Scopture drawing in the active or provided organization and initializes its latest .duc file. If fromDrawing is provided, the new drawing is created by duplicating the contents of an existing accessible drawing in the same organization.

create_issues

ChatGPT
Create one or more issues on a drawing in a single call. firstMessage uses the same markdown mention and attachment wildcards as send_message. assigneeIds accepts only exact user IDs returned by find_user. Every ID must belong to the drawing organization. Location fields can be used to anchor the issue to the canvas, an element, or a model point. The response returns the created issue ids and human-facing local ids.

export_asset

ChatGPT
Exports a drawing, model, or element. Server-side exports are used for non-raster drawing formats and generated CAD model formats; live clients are only required for PNG/image raster exports and viewer-only 3D scene formats.

find_user

ChatGPT
Find active organization members by a case-insensitive partial name or email match. The caller must have integration access to the supplied organizationId. Exact matches are returned first. Use the returned userId values with issue assigneeIds fields.

get_charter

ChatGPT
Read the drawing charter. Use add_requirements, add_constraints, or add_decisions to append charter content. Use the issue tools for issue-level discussion linked from the charter.

get_drawing

ChatGPT
Returns the authenticated user's most recently visited drawing by default, plus their current perspective state when available. Use this proactively when a new prompt may depend on what the user is viewing or editing. If a client is live, the response may include appState such as selected elements, viewport, zoom, scope, and other point-of-view context. appState is optional because MCP may run server-side when no client is open. Use get_drawing_versions tool to inspect the drawing's version graph.

get_drawing_screenshot

ChatGPT
Requests a live WebP screenshot from a client that is actively viewing the authenticated user's active drawing by default. When no arguments are provided, captures the current viewport. If any screenshot argument is provided, capture uses crop semantics with the provided viewport-relative region. By default this returns inline base64 image content; set responseMode=presigned-url for a short-lived download URL.

get_drawing_versions

ChatGPT
Returns a drawing's version history. A checkpoint is a full snapshot of the drawing at a point in time. A delta is a lightweight set of changes relative to a checkpoint, structurally diffed with gzip-compressed fossil delta. Auto-deltas are the same as deltas, but created automatically by agents or background tasks. Use restore_changes tool to roll back to any version.

get_elements

ChatGPT
Returns compact drawing elements as JSON. Filter with element_type, elementIds, or bbox. Response includes availableElementTypes, availableFields, countsByType, and aggregate bbox. Uses the live client when available and falls back to the latest saved remote drawing.

get_external_files

ChatGPT
Returns metadata and short-lived pre-signed download URLs for one or more external files attached to an accessible drawing. If drawingId is omitted, the active or most recently visited drawing is used. By default, active revisions are returned; pass revisionIds keyed by fileId to request specific revisions.

list_available_drawings

ChatGPT
Lists remote drawings available to the authenticated user account.

list_issues

ChatGPT
List issues on a drawing, newest first. Optional query searches title and dismissed reason.

list_messages

ChatGPT
Find issue messages on a drawing, newest first. Use issueId to limit results to one issue, query to search message content across the drawing, or both to search within one issue.

open_model_element

ChatGPT
Opens or closes the specialized view for a model element on the canvas (e.g. 3D models, DXF models). Requires an active client connected to the target drawing.

restore_changes

ChatGPT
Restores the authenticated user's drawing to a specific version, auto-delta, relative prompt turn, the latest version, or the initial checkpoint. promptTurnsAgo counts recent agent-created auto-deltas.

run_python_code

ChatGPT
Run Python 3.12 in an isolated Scopture sandbox for the active drawing. Execution: - The tool returns a jobId. waitForCompletionMs defaults to 0, so submit once and poll with check_python_run_job; do not rerun pending mutations. - Import installed libraries explicitly. For 3D model previews, import show from ocp_vscode and call show(model). - modelOutputKind controls model capture: parametric (default) captures build123d shapes passed to show(...); ifc captures and tessellates an ifcopenshell model; dxf returns a generated ezdxf model file; none expects no model output. It does not control update_drawing(...). Drawing and file helpers: - get_drawing() returns the active drawing as raw .duc bytes, not a parsed object. - get_external_files(*file_ids) returns {file_id: bytes} for the requested mounted external-file IDs. - resolve_external_file(file_id) returns the sandbox-local path for a mounted file, for libraries that require a filesystem path. - update_drawing(data) applies an ID-based patch, not a full-state replacement. Submit complete records only for new or changed items: matching IDs update, new IDs add, and omissions remain unchanged. - Pass a state dict, a compatible ducpy object, or valid .duc bytes; dict and object inputs are serialized with embedded-code validation. Fonts: - FontEnum(...) supports iteration, key access, and identifier-safe attributes such as FONTS.Noto_Sans. - resolve_font(family) returns the sandbox-local TTF path for libraries that need a font path or filename; build123d Text(..., font=family) resolves that path automatically. Code that does not call update_drawing(...) cannot mutate the drawing.

run_sqlite

ChatGPT
Run SQLite against one or more authorized gzip-compressed .duc drawings through ducpy.DucSQL. Modes: - per-drawing: Run one read query for every drawing. Use {db} before table names, for example SELECT id FROM {db}.elements or PRAGMA {db}.table_info(elements). - attached: Read across attached drawings using SQL-safe aliases derived from drawing IDs, such as db_<drawingId> with unsupported characters replaced by _. Use aliases to override them. - mutate: Update exactly one drawing using bare table names, without {db}. The result is written back as gzip-compressed .duc bytes. Read modes accept SELECT, WITH, and read-only PRAGMA queries. Use parameters for bound values and maxRows to cap results. The tool returns a jobId. waitForCompletionMs defaults to 30000; if the job is still pending, poll it with check_python_run_job.

search_text

ChatGPT
Searches text within a remote .duc drawing using ducpy.search and returns JSON results. This is a first-party read-only search job; it requires drawing view access and does not expose arbitrary Python execution.

send_message

ChatGPT
Send a markdown message to an issue. The messages support several wildcard mentions: - @email or @name renders a user mention in the message. - mentionIds accepts only exact user IDs returned by find_user; every ID must belong to the drawing organization. - #<localId> mentions another issue on the same drawing (for example #42). - ![label](attachment:<fileId>) embeds an attachment that was already uploaded to the drawing. - [label](canvas-selection:elements?elementIds=<id1>,<id2>,...) references one or more canvas elements by ID (comma-separated, URL-encoded). - Fenced ``mermaid code blocks render as Mermaid diagrams. Provide replyToId` to post a threaded reply.

update_charter_status

ChatGPT
Update the drawing charter status. Setting phase to closed requires closedReason. Non-closed phases clear closedReason.

update_issue

ChatGPT
Update issue metadata or re-anchor it. Setting status to dismissed requires dismissedReason. Pass null to clear nullable fields such as dueDate or a location field. Set assigneeIds to exact user IDs returned by find_user; pass an empty array to clear all assignees. Every ID must belong to the drawing organization.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps