MCP App Store
by KeenEthics
Business & Operations
DocStudio icon

DocStudio

by DocStudio

Overview

DocStudio brings your e-signature and document approval workflow into ChatGPT. Start a new envelope from one of your DocStudio templates, fill in its fields and tables, add attachments, choose who signs or approves, and send it out, or quick-send your own files for signature without a template. Ask ChatGPT to find envelopes in your inbox or sent box, check who has signed and who is still pending, read what a document says, or get it as a PDF. When something is waiting on you, you can approve or reject it right from the conversation; you can also cancel an envelope that is already out, delete unsent drafts, and organize envelopes with labels. Every action runs in your own DocStudio account, with the same permissions you have there, through secure OAuth sign-in.

Tools

accounts_get

ChatGPT
Get details of an account. Use the accountId from workspaces_list.

attachments_get

ChatGPT
Get an attachment by its Id: file name, size, content type, the files inside it when it is an archive or a signature container, and the signatures it carries. Pass envelopeId whenever the attachment belongs to an envelope: the answer then respects which roles may see that attachment and returns the document's own copy. To get the file itself, prefer files_download_link with target attachment; includeContent returns the bytes base64-encoded, up to 5 MB, and only suits a small file. To read what an envelope document says, documents_extract_text returns text and is far cheaper.

attachments_upload

ChatGPT
Store a small file sent inline as base64 and get the attachment Id that an attachment field, an external document or a quick send document is filled with. Prefer files_upload_link: it takes a file of any size without passing its bytes through this connection, and the user can drop the file themselves. Use this tool only for a small file you already hold in full. The stored file is not part of any envelope yet: set the returned attachmentId as the value of the attachment field with envelopes_set_fields or envelopes_create_from_template, or name it in a document of envelopes_quick_send, otherwise it is discarded as unused after a while. Upload the file once per field that needs it: the same attachment cannot sit in two fields of an envelope, even when the file is the same.

categories_list

ChatGPT
List the template categories visible in a mailbox. A category is a folder templates are filed under; categories form a tree through parentId and carry an access level of their own, so a mailbox sees its own categories together with the account, public and official ones. Returns them flat, in creation order. Use the Ids here with the categoryId filter of templates_search, and to read the names behind the categories templates_get reports.

dictionaries_get

ChatGPT
Get one dictionary with the exact columns its rows are made of. Read this before querying rows: the column Ids returned here are the keys of every row, and a filter in dictionaries_query_rows names its column by Id or by name.

dictionaries_query_rows

ChatGPT
Read rows of a dictionary, optionally narrowed by filters on its columns. Values are always strings, keyed by column Id because column names may repeat. Rows come back in creation order; this tool cannot sort them. Call dictionaries_get first to map column Ids to names. When the dictionary is not shared with this mailbox, pass envelopeId with the documentId and fieldName of the select-dictionary field being filled: the envelope then grants the reading, the template's own restrictions on that field are applied, and each row comes back with the single column that field takes its value from. Use keyword to search within it, and pass the returned rowId as recordId when setting the value.

documents_extract_text

ChatGPT
Read what a document says. The document is rendered and its text pulled out, whatever it started as, so this works for structured documents, PDFs and uploaded files alike. Use it to answer questions about wording; documents_list is the way to read field values.

documents_get_file

ChatGPT
Get a document as a file, rendered to PDF and base64-encoded, up to 5 MB. Prefer files_download_link with target document_pdf: it works for any size, keeps the bytes out of this connection, and the user can open the link themselves. Ask for this only when the bytes themselves are needed and the document is small: documents_extract_text answers questions about the content far more cheaply.

documents_list

ChatGPT
List the documents of an envelope as they stand right now: the fields each one defines, the value every field currently holds, the rows of its dynamic tables and which signatures are still missing. This is the tool to read before filling anything in; documents_extract_text gives the readable text instead.

envelopes_approve

ChatGPT
Approve whatever this mailbox is being asked to approve. When an approval flow is waiting on this mailbox, its step is approved and the flow moves on; otherwise the mailbox's approver role in the envelope flow is completed. Only call this when envelopes_get lists approve among the available actions.

envelopes_assign_participants

ChatGPT
Assign or change who holds a flow role. On a draft any role can still be moved; on an envelope already out only roles that have not acted yet can be handed over, and the new person is notified. Each assignment needs exactly one of mailboxId or email. Roles and their current holders come from envelopes_get.

envelopes_cancel

ChatGPT
Cancel an envelope that is already out: everyone still waiting stops being asked to act and the envelope ends as CANCELLED. Only envelopes in SENT, WAITING or ON_APPROVAL can be cancelled, and this cannot be undone. Recipients see the reason, so write it for them. A draft is not cancelled but deleted, with envelopes_delete_draft.

envelopes_create_from_template

ChatGPT
Create a draft envelope from a template. Call templates_get first: every non-sender role has to be assigned here, and the fields you prefill have to exist on the documents. Nothing is sent to anyone; envelopes_validate then envelopes_send finish the job. Read the returned subject back, a template that defines its own subject overrides what you pass.

envelopes_delete_draft

ChatGPT
Delete a draft envelope for good, together with its history. Only envelopes still in DRAFT can be deleted this way and this cannot be undone; an envelope that was already sent is stopped with envelopes_cancel instead.

envelopes_get

ChatGPT
Get where one envelope stands right now: its status, every participant and whether the flow is waiting for them, the template version it runs on, account metadata, a summary of each document, and what this mailbox is expected to do next. Field values live in documents_list.

envelopes_quick_send

ChatGPT
Send files to people without a template. Each file becomes one document of a new envelope and goes out immediately: there is no draft to review and this cannot be undone. Up to 50 files in one call. A file is named either by attachmentId, when it is already stored in this service, or inline as base64 when it is small; never re-encode a large file into the arguments, upload it with attachments_upload first. Use envelopes_create_from_template when the recipients have to fill anything in, or when you want to check the envelope before it leaves.

envelopes_reject

ChatGPT
Refuse what this mailbox is being asked to do. When an approval flow is waiting on this mailbox, its step is rejected and the flow stops there. Otherwise the envelope itself is refused and ends as CANCELLED for everyone, exactly as envelopes_cancel does. Either way the reason is recorded and shown, and neither can be undone.

envelopes_send

ChatGPT
Hand the envelope on. From a draft it goes out to the recipients, so run envelopes_validate first and only send when it reports canSend; a subject is mandatory by then, pass one here if the draft has none, and read the returned subject back because a template that defines its own overrides it. On an envelope already in flight this submits whatever this mailbox filled in with envelopes_set_fields and tables_apply_changes and completes its step, which moves the flow to whoever is next. That works for a fill step only: an approval step is completed by envelopes_approve, and a step waiting for a signature cannot be completed here at all, whatever envelopes_validate reports about errors. Either way people are notified and it cannot be undone.

envelopes_set_fields

ChatGPT
Set field values on an envelope. A draft takes anything from its sender; an envelope already out takes the fields of the roles this mailbox holds, while the flow is waiting for it. On a select-dictionary field pass recordId alongside the value so the chosen dictionary row is recorded and its lookup fields resolve. On an einksign or initials field the value is a png data URI: take it unchanged from get_user_signature when the user has one saved, and otherwise generate one as docflow://docs/field/einksign describes. A checkbox takes the string "1" or "0", never true or false. Values are saved, not submitted: keep calling this and tables_apply_changes as needed, then envelopes_send to hand the envelope on. Field names come from documents_list or templates_get; table rows go through tables_apply_changes.

envelopes_update

ChatGPT
Change what the sender owns on an envelope: its subject, its covering message and the account metadata filed with it. Subject and message can only be changed while the envelope is still a draft, and a template that defines its own overrides them; metadata can be updated after sending too.

envelopes_validate

ChatGPT
Check whether an envelope is ready to go out and get back everything that stands in the way: missing required values, unassigned roles, anything the documents reject. Run this before envelopes_send rather than sending and reading the refusal.

files_upload_status

ChatGPT
Check an upload link from files_upload_link. state is ready while the file has not arrived yet, used once it is stored, with attachmentId set, and expired when the link timed out before a file came.

get_user_profile

ChatGPT
Get the current user's profile: name, email, language and time zone.

get_user_signature

ChatGPT
Get the current user's saved signature and initials, each as a data:image/png;base64 URI ready to be used as the value of an einksign or initials field. Pass such a value on unchanged: never decode, re-encode, resize or strip the prefix, it is already valid for the field. hasSignature and hasInitials say whether each one exists; false is the answer, not a failure, and calling again returns the same thing because it only changes when the user saves an image in the web app. Generate the missing image instead, as docflow://docs/field/einksign and docflow://docs/field/initials describe. One call covers every einksign and initials field of an envelope, however many there are. These are full images, so call this only when the images themselves are needed; get_user_profile covers everything else about the user.

labels_assign

ChatGPT
Put one label of this mailbox on one or more envelopes. The label stays private to this mailbox and does not touch the envelope itself, so it is safe on an envelope in any status. Name the label by labelId or by labelName; the label has to exist already, this tool does not create one. Assigning a label an envelope already carries changes nothing.

labels_list

ChatGPT
List the labels of a mailbox. A label is a private marker this mailbox puts on envelopes: it belongs to the mailbox that created it, no other participant of an envelope sees it, and it changes nothing in the envelope or its flow. Use the Ids returned here with labels_assign, labels_unassign and the label filter of envelopes_search. Read docflow://docs/labels for the rules.

labels_unassign

ChatGPT
Take one label of this mailbox off one or more envelopes. Only the marker is removed: the label itself and the envelopes stay as they are. Name the label by labelId or by labelName. Removing a label an envelope does not carry changes nothing.

mailboxes_get

ChatGPT
Get details of one mailbox: its name, the account owning it, and the permission codes the current user holds in it. Use the mailboxId from workspaces_list.

tables_apply_changes

ChatGPT
Add rows to a dynamic table or change the values in rows it already has. Row indexes are zero-based and come from tables_get; add appends to the end, update writes into an existing row, clear empties one. Rows cannot be removed once created, so clear a row you no longer need. On a select-dictionary cell pass recordId next to the value, the same way envelopes_set_fields takes it. Changes are saved, not submitted: call envelopes_send once everything this mailbox owns is filled in.

tables_get

ChatGPT
Get one dynamic table of an envelope document: its columns, the fields that make up a row, and every row currently in it. Table names come from documents_list or envelopes_get.

templates_get

ChatGPT
Get the full definition of one template version: its settings, the flow roles that have to be assigned when an envelope is created from it, and every document with the fields defined on it. Pass envelopeId to read the template an envelope runs on: a recipient can then see the definition behind an envelope addressed to them even when the template itself is not shared with their mailbox, and the version is the one that envelope follows rather than the current one.

workspaces_list

ChatGPT
List the workspaces the current user belongs to: every account, the mailboxes inside it, and the permission codes the user holds at each level. Call this first: every other tool needs an accountId or a mailboxId from here.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

38

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily